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

发布于 2024-11-01 15:51:51 字数 307 浏览 0 评论 0原文

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

基本上,我读取一个 JSON 文件,更改密钥,然后将新的 JSON 写回同一文件。一切正常,但我失去了 JSON 格式。所以,而不是:

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

我得到

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

Is There a way in Node.js to write well formatted JSON to file ?

This seems like a solved problem but I am unable to find a solution for it.

Basically, I read a JSON file, change a key, and write back the new JSON to the same file. All works, but I loose the JSON formatting.So, instead of:

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

I get

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

Is there a way in Node.js to write well formatted JSON to file ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

沫离伤花 2024-11-08 15:51:51

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,
}
*/

请参阅 JSON.stringify() 文档,网址为MDNNode fs 文档

JSON.stringify's third parameter defines white-space insertion for pretty-printing. It can be a string or a number (number of spaces). Node can write to your filesystem with fs. Example:

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,
}
*/

See the JSON.stringify() docs at MDN, Node fs docs

不打扰别人 2024-11-08 15:51:51

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

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

I think this might be useful... I love example code :)

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);
    }
}); 
暮年 2024-11-08 15:51:51

如果您只想漂亮地打印对象而不将其导出为有效的 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})

记录的屏幕截图object

在底层,它是 console.log(util.inspect(…)) 的快捷方式。
唯一的区别是它绕过对象上定义的任何自定义 inspect() 函数。

If you just want to pretty print an object and not export it as valid JSON you can use console.dir().

It uses syntax-highlighting, smart indentation, removes quotes from keys and just makes the output as pretty as it gets.

const jsonString = `{"name":"John","color":"green",
                     "smoker":false,"id":7,"city":"Berlin"}`
const object = JSON.parse(jsonString)

console.dir(object, {depth: null, colors: true})

Screenshot of logged object

Under the hood it is a shortcut for console.log(util.inspect(…)).
The only difference is that it bypasses any custom inspect() function defined on an object.

_蜘蛛 2024-11-08 15:51:51

如果您不想将其存储在任何地方,而只是为了调试目的而查看该对象。

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

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

If you don't want to store this anywhere, but just view the object for debugging purposes.

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

You can change the third parameter to adjust the indentation.

清风无影 2024-11-08 15:51:51

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

I know this is old question. But maybe this can help you ????

JSON string

var jsonStr = '{ "bool": true, "number": 123, "string": "foo bar" }';

Pretty Print JSON

JSON.stringify(JSON.parse(jsonStr), null, 2);

Minify JSON

JSON.stringify(JSON.parse(jsonStr));
梦幻的心爱 2024-11-08 15:51:51

那这个呢?

console.table(object)

sample

what about this?

console.table(object)

sample

也只是曾经 2024-11-08 15:51:51

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

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

Another workaround would be to make use of prettier to format the JSON.
The example below is using 'json' parser but it could also use 'json5', see list of valid parsers.

const prettier = require("prettier");
console.log(prettier.format(JSON.stringify(object),{ semi: false, parser: "json" }));
半城柳色半声笛 2024-11-08 15:51:51

如果 prettify 是新行上的名称值对,那么在 stringify 中指定空格数对我来说不起作用,唯一对我有用的是

await fs.promises.writeFile('testdataattr.json',JSON.stringify(datatofile, null,'\r\n'),'utf8') ;

if prettify is name value pairs on new lines then specifying number of spaces in stringify didn't work for me the only thing that worked for me was

await fs.promises.writeFile('testdataattr.json',JSON.stringify(datatofile, null,'\r\n'),'utf8') ;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文