这个问题似乎已经解决了,但我找不到解决办法。
基本上,我读取一个JSON文件,更改一个键,然后将新的JSON写回相同的文件。所有工作,但我松散的JSON格式。所以,与其:
{
name:'test',
version:'1.0'
}
我得到
{name:'test',version:'1.1'}
在Node.js中是否有一种方法可以将格式良好的JSON写入文件?
这个问题似乎已经解决了,但我找不到解决办法。
基本上,我读取一个JSON文件,更改一个键,然后将新的JSON写回相同的文件。所有工作,但我松散的JSON格式。所以,与其:
{
name:'test',
version:'1.0'
}
我得到
{name:'test',version:'1.1'}
在Node.js中是否有一种方法可以将格式良好的JSON写入文件?
当前回答
如果prettify是新行上的名称值对,那么在stringify中指定空格数对我不起作用,唯一对我起作用的是
await fs.promises.writeFile('testdataattr.json',JSON.stringify(datatofile, null,'\r\n'),'utf8') ;
其他回答
另一种解决方法是使用更漂亮的格式来格式化JSON。 下面的例子是使用'json'解析器,但它也可以使用'json5',请参阅有效解析器列表。
const prettier = require("prettier");
console.log(prettier.format(JSON.stringify(object),{ semi: false, parser: "json" }));
JSON。Stringify的第三个参数定义了用于漂亮打印的空白插入。它可以是字符串或数字(空格数)。Node可以使用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,
}
*/
请参阅MDN, Node fs docs中的JSON.stringify()文档
我想这可能有用……我喜欢示例代码:)
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);
}
});
如果你只是想漂亮地打印一个对象,而不是将其导出为有效的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})
实际上,它是console.log(util.inspect(…))的快捷方式。 唯一的区别是它绕过了对象上定义的任何自定义inspect()函数。
这个呢?
console.table(object)