如何使用node.js漂亮地打印JSON?


436

这似乎是一个已解决的问题,但我无法找到解决方案。

基本上,我读取了一个JSON文件,更改了密钥,然后将新的JSON写回到同一文件。都可以,但是我松了JSON格式,所以,而不是:

{
  name:'test',
  version:'1.0'
}

我懂了

{name:'test',version:'1.1'}

Node.js中是否可以将格式良好的JSON写入文件?


JSON.stringify使循环对象窒息,并且util.inspect不会产生有效的json。:\我没有找到在
NodeJS中

@ThorSummoner:这是JSON的问题,而不是Node的问题-JSON本身不支持循环引用。另一个问题这里有一个解决方案。
Sasha Chedygov

Answers:


814

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上JSON.stringify()文档Node fs文档


1
注意:"\t"如果需要制表符,请使用4,而不是4 。
Jeremy Thille

在最新的nodejs中,您需要提供一个回调函数作为第三个参数,请参见以下答案:stackoverflow.com/a/11677276/675065
Alp

216

我认为这可能有用...我喜欢示例代码:)

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);
    }
}); 

4
确保tmp文件夹存在,否则可能失败。
拉里·

2
在大多数的Unix系统(包括Mac和Linux ..,如果我还记得BSD)中,tmp默认情况下存在文件夹
Antony

Windows下要给出的位置(输出文件名)是什么
Devrath

我不知道为什么没有回调就没有写我的文件(刚打开时是空的)……或者它是异步的,并且因为我在应用程序启动时抛出了异常而没有用?
Tomasz Gandor

1
谢谢,这对我有很大帮助。
Suraj Jain

83

如果您只想漂亮地打印对象而不将其导出为有效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()在对象上定义的任何自定义函数。


8
console.dir不会产生有效的json。
Gregg Lind

1
@GreggLind在回答中阐明了这一点!
adius

这使我的快递服务器停顿了。我不知道为什么:(
Sanket Berde '18

34

如果您不想将其存储在任何地方,而只是查看对象以进行调试。

console.log(JSON.stringify(object, null, "  "));

您可以更改第三个参数以调整缩进量。


1
我一直在寻找这种解决方案-永远!最后一个参数就像一个魅力!
vt2424253 '19

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.