这似乎是一个已解决的问题,但我无法找到解决方案。
基本上,我读取一个 JSON 文件,更改一个密钥,然后将新的 JSON 写回同一个文件。一切正常,但我失去了 JSON 格式。所以,而不是:
{
name:'test',
version:'1.0'
}
我明白了
{name:'test',version:'1.1'}
Node.js 中有没有办法将格式良好的 JSON 写入文件?
JSON.stringify
阻塞循环对象,util.inspect
不会产生有效的 json。 :\ 我没有找到在 NodeJS 中漂亮打印 JSON 的 [native] 解决方案
JSON.stringify
的第三个参数定义了用于漂亮打印的空白插入。它可以是字符串或数字(空格数)。节点可以使用 fs
写入您的文件系统。例子:
var fs = require('fs');
fs.writeFile('test.json', JSON.stringify({ a:1, b:2, c:3 }, null, 4));
/* test.json:
{
"a": 1,
"b": 2,
"c": 3,
}
*/
请参阅 JSON.stringify() docs at MDN、Node fs docs
我认为这可能有用......我喜欢示例代码:)
var fs = require('fs');
var myData = {
name:'test',
version:'1.0'
}
var outputFilename = '/tmp/my.json';
fs.writeFile(outputFilename, JSON.stringify(myData, null, 4), function(err) {
if(err) {
console.log(err);
} else {
console.log("JSON saved to " + outputFilename);
}
});
tmp
文件夹存在,否则可能会失败。
tmp
文件夹
writeFile
调用不会阻塞程序。如果你不传递回调,Node 就没有更多代码要运行,所以它会在调用后立即退出,很可能在实际写入完成之前退出。
如果您只想漂亮地打印一个对象而不是将其导出为有效的 JSON,您可以使用 console.dir()
。
它使用语法高亮,智能缩进,从键中删除引号,并使输出尽可能漂亮。
const jsonString = `{"name":"John","color":"green",
"smoker":false,"id":7,"city":"Berlin"}`
const object = JSON.parse(jsonString)
console.dir(object, {depth: null, colors: true})
https://i.stack.imgur.com/ALZfc.png
它实际上是 console.log(util.inspect(…))
的快捷方式。唯一的区别是它绕过了在对象上定义的任何自定义 inspect()
函数。
如果您不想将其存储在任何地方,而只是查看对象以进行调试。
console.log(JSON.stringify(object, null, " "));
您可以更改第三个参数来调整缩进。
那这个呢?
console.table(object)
https://i.stack.imgur.com/8PJK6.png
我知道这是个老问题。但也许这可以帮助你😀
JSON字符串
var jsonStr = '{ "bool": true, "number": 123, "string": "foo bar" }';
漂亮的打印 JSON
JSON.stringify(JSON.parse(jsonStr), null, 2);
缩小 JSON
JSON.stringify(JSON.parse(jsonStr));
另一种解决方法是使用 prettier 来格式化 JSON。下面的示例使用“json”解析器,但也可以使用“json5”,请参阅 list of valid parsers。
const prettier = require("prettier");
console.log(prettier.format(JSON.stringify(object),{ semi: false, parser: "json" }));
如果 prettify 是新行上的名称值对,那么在 stringify 中指定空格数对我不起作用唯一对我有用的是
await fs.promises.writeFile('testdataattr.json',JSON.stringify(datatofile, null,'\r\n'),'utf8') ;
不定期副业成功案例分享
"\t"
而不是 4。fs.writeFile
的第三个参数;如果 write 是脚本中的最后一个命令,则实际上不必使用回调。如果你想在writeFile
之后做一些事情,你只需要回调,而不是退出进程。