2017-02-11 119 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));