web-dev-qa-db-ja.com

fs.writeFileSyncを使用してJSONオブジェクトをJSONファイルに書き込む

JSONオブジェクトをJSONファイルに書き込もうとしています。コードはエラーなく実行されますが、オブジェクトの内容が書き込まれる代わりに、JSONファイルに書き込まれるのは次のとおりです。

[object Object]

これは実際に書いているコードです:

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

'output'はJSONオブジェクトであり、ファイルは既に存在しています。詳細情報が必要な場合はお知らせください。

71
Romulus3799

オブジェクトを文字列化する必要があります。

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

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);
45
akinjide

3番目の引数をstringifyに渡して、jsonを人間が読めるようにします。

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

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

それが役立つことを願っています。