2017-02-11 117 views
18

一个JSON文件,我想写一个JSON对象的JSON文件。该代码的执行没有错误,但不是那个被写进JSON文件本身被写入的对象,都是:写作JSON对象与fs.writeFileSync

[object Object] 

这是实际执行的写代码:

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

“输出'是一个JSON对象,并且该文件已经存在。请让我知道是否需要更多信息。

+6

fs.writeFileSync( '../数据/ phraseFreqs.json',JSON.stringify(输出)) – Daniel

回答

27

我不认为你应该使用Synchronous是好的,Asynchronously将数据写入文件也较好字符串化的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!"); 
}); 
+0

如果是在一个简短的脚本或其他东西,同步是好的。如果它是服务器请求的一部分,那么它应该是异步的。 –

+0

不一定,I/O密集型进程应异步发,但根据短剧本的复杂性,你可能会选择在同步。 – akinjide

+0

这不是问题的答案。 –

14

您需要将对象串联起来。

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

欢迎来到SO,在回答问题之前,请尝试查看现有答案。如果你的答案已经被提出,请改为提供答案。请参阅[社区指南](https://stackoverflow.com/help/how-to-answer)撰写一个好的答案。 – LightBender

-1

我想补充到akinjide的回答。

我相信,你可能有疑惑了这一点,因为,执行console.log(JSON_OBJECT)将打印JSON字符串到控制台。但是,当你将其写入文件时,它确实写入[object Object]。这是因为,console.log(object)会在将JSON对象实际写入控制台之前将其隐式转换为字符串,而FS.writeFile()则不会。希望这有助于你的理解。

参考:Write JSON to File in Node.js - Node FS

2

使JSON人类可读具有:

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