如何使用node.js打印JSON?

Raj*_*jat 403 json node.js

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

基本上,我读取了一个JSON文件,更改了一个密钥,并将新的JSON写回到同一个文件中.一切正常,但我放松了JSON格式.所以,而不是:

{
  name:'test',
  version:'1.0'
}
Run Code Online (Sandbox Code Playgroud)

我明白了

{name:'test',version:'1.1'}
Run Code Online (Sandbox Code Playgroud)

在Node.js中有没有办法将格式良好的JSON写入文件?

Ric*_*asi 761

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,
}
*/
Run Code Online (Sandbox Code Playgroud)

请参阅MDN上JSON.stringify()文档,Node fs docs

  • 注意:如果您需要制表符,请使用 `"\t"` 而不是 4。 (9认同)

nym*_*nym 212

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

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);
    }
}); 
Run Code Online (Sandbox Code Playgroud)

  • 确保`tmp`文件夹存在,否则可能会失败. (3认同)
  • 在大多数unix系统中(包括Mac和Linux ......如果我记得BSD),默认情况下存在`tmp`文件夹 (2认同)

adi*_*ius 75

如果您只想打印一个对象而不是将其导出为有效的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})
Run Code Online (Sandbox Code Playgroud)

记录对象的屏幕截图

在引擎盖下它是一个捷径console.log(util.inspect(…)).唯一的区别是它绕过inspect()了对象上定义的任何自定义函数.

  • console.dir不生成有效的json. (5认同)
  • @GreggLind 在答案中澄清了这一点! (2认同)

San*_*rde 22

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

console.log(JSON.stringify(object, null, "  "));
Run Code Online (Sandbox Code Playgroud)

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

  • 我一直在寻找这个解决方案 - 就像永远一样!最后一个参数就像一个魅力! (2认同)

小智 7

那这个呢?

console.table(object)
Run Code Online (Sandbox Code Playgroud)

样品


jko*_*nst 5

另一种解决方法是使用 prettier 来格式化 JSON。下面的示例使用“json”解析器,但也可以使用“json5”,请参阅有效解析器列表

const prettier = require("prettier");
console.log(prettier.format(JSON.stringify(object),{ semi: false, parser: "json" }));
Run Code Online (Sandbox Code Playgroud)


ill*_*art 5

我知道这是个老问题。但也许这可以帮助你

JSON 字符串

var jsonStr = '{ "bool": true, "number": 123, "string": "foo bar" }';
Run Code Online (Sandbox Code Playgroud)

漂亮的打印 JSON

JSON.stringify(JSON.parse(jsonStr), null, 2);
Run Code Online (Sandbox Code Playgroud)

缩小 JSON

JSON.stringify(JSON.parse(jsonStr));
Run Code Online (Sandbox Code Playgroud)