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


116

我正在尝试将JSON对象写入JSON文件。代码执行时没有错误,但是不是写入对象的内容,而是写入JSON文件的所有内容是:

[object Object]

这是实际编写代码的代码:

fs.writeFileSync('../data/phraseFreqs.json', output)

“输出”是一个JSON对象,并且该文件已经存在。如果需要更多信息,请告诉我。


11
fs.writeFileSync('../ data / phraseFreqs.json',JSON.stringify(output))
丹尼尔

Answers:


169

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

fs.writeFileSync('../data/phraseFreqs.json', JSON.stringify(output));

2
欢迎使用SO,在回答问题之前,请尝试查看现有答案。如果您的答案已经被建议,请改掉该答案。请参阅社区指南以写出一个好的答案。
LightBender

44
我喜欢这样回答问题,而无需考虑是否使用同步与异步操作。
布赖恩·邓肯

1
为了提高可读性,你可以使用JSON.stringify方法的空间参数:fs.writeFileSync('../data/phraseFreqs.json', JSON.stringify(output, null, 2));:更多developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...

48

我不认为您应该使用同步方法,将数据异步写入文件最好也将output其字符串化object

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

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

添加了将数据写入文件的同步方法,但是请考虑您的用例。异步与同步执行的真正含义是什么?

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

fs.writeFileSync('/tmp/phraseFreqs.json', content);

9
如果是用简短的脚本或其他方式完成,那么同步就可以了。如果它是服务器请求之类的东西,那么它应该是异步的。
希尔顿沉道酒店'18

1
不一定必须将与I / O绑定的进程设为异步,但取决于您可能选择同步的简短脚本复杂性。
akinjide

4
这不是问题的答案。
斯蒂芬·比耶吉特

6
用户特别要求使用同步方法
Anthony

7
请停止说异步好。并暗示同步不良。如果您担心速度,则Webpack应该为您进行优化。您不是优化器。原因:json命令行工具需要编写同步文件。在将数据传送到链中的下一个应用程序之前,该程序必须关闭它们打开的所有文件。
TamusJRoyce

27

通过将第三个参数传递给,使JSON对人类可读stringify

fs.writeFileSync('../data/phraseFreqs.json', JSON.stringify(output, null, 4));

1

将数据发送到Web服务器时,数据必须是字符串(在此处)。您可以使用将JavaScript对象转换为字符串JSON.stringify()是一个工作示例:

var fs = require('fs');

var originalNote = {
  title: 'Meeting',
  description: 'Meeting John Doe at 10:30 am'
};

var originalNoteString = JSON.stringify(originalNote);

fs.writeFileSync('notes.json', originalNoteString);

var noteString = fs.readFileSync('notes.json');

var note = JSON.parse(noteString);

console.log(`TITLE: ${note.title} DESCRIPTION: ${note.description}`);

希望能有所帮助。


1

这是一个变体,使用fs使用promises 的版本:

const fs = require('fs');

await fs.promises.writeFile('../data/phraseFreqs.json', JSON.stringify(output)); // UTF-8 is default
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.