使用fs.writeFileSync将JSON对象写入JSON文件

Rom*_*799 90 json file fs node.js

我正在尝试将JSON对象写入JSON文件.代码执行没有错误,但是不是写入对象本身,所有写入JSON文件的是:

[object Object]
Run Code Online (Sandbox Code Playgroud)

这是实际写作的代码:

fs.writeFileSync('../data/phraseFreqs.json', output)
Run Code Online (Sandbox Code Playgroud)

'output'是一个JSON对象,该文件已经存在.如果需要更多信息,请告诉我.

Kam*_*mal 128

您需要对对象进行字符串化.

fs.writeFileSync('../data/phraseFreqs.json', JSON.stringify(output));
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这个回答问题而没有关于是否使用同步和异步操作的意见. (35认同)
  • 出于可读性目的,您可以使用 JSON.stringify 方法的 space 参数:`fs.writeFileSync('../data/phraseFreqs.json', JSON.stringify(output, null, 2));` 更多:https: //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify (4认同)
  • 欢迎使用SO,在回答问题之前,请尝试查看现有答案。如果您的答案已经被建议,请对该答案进行投票。有关撰写好的答案,请参见[社区指南](https://stackoverflow.com/help/how-to-answer)。 (2认同)

aki*_*ide 47

我不认为你应该使用output是好的,object将数据写入文件更好也stringify output如果它的一个flag.

注意:如果output是字符串,则指定编码并记住object选项:

const fs = require('fs');
const content = JSON.stringify(output);

fs.writeFile('/tmp/phraseFreqs.json', content, 'utf8', function (err) {
    if (err) {
        return console.log(err);
    }

    console.log("The file was saved!");
}); 
Run Code Online (Sandbox Code Playgroud)

添加了将数据写入文件的同步方法,但请考虑您的用例.异步与同步执行,它到底意味着什么?

const fs = require('fs');
const content = JSON.stringify(output);

fs.writeFileSync('/tmp/phraseFreqs.json', content);
Run Code Online (Sandbox Code Playgroud)

  • 请停止说异步好。并暗示同步不好。如果你担心速度,你的 webpack 应该为你做优化。你不是优化者。原因:json命令行工具需要同步文件写入。在将数据传输到链中的下一个应用程序之前,必须关闭他们打开的所有文件。 (9认同)
  • 如果它是在一个简短的脚本或其他东西完成,同步是好的.如果它是服务器请求的一部分,那么它应该是异步的. (7认同)
  • 这不是问题的答案. (3认同)
  • 用户特意要求同步方法 (3认同)

小智 19

使json人类可读:

stringify

  • 并使用`... null,2))使其更具可读性;` (8认同)