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))
Daniel

回答:


169

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

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

2
SOへようこそ。質問に答える前に、既存の答えを確認してください。回答がすでに提案されている場合は、代わりにその回答に賛成票を投じてください。良い答えを書くにはコミュニティガイドを見てください。
LightBender 2017

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
短いスクリプトなどで行われている場合は、同期で問題ありません。それがサーバー要求または何かの一部である場合、それは非同期でなければなりません。
ヒルトンシャムウェイ

1
必ずしも必要ではありませんが、I / Oバウンドプロセスは非同期にする必要がありますが、短いスクリプトの複雑さに応じて、同期を選択できます。
akinjide

4
これは質問に対する答えではありません。
Stephan Bijzitter

6
ユーザーが同期メソッドを具体的に求めた
Anthony、

7
async goodと言うのはやめてください。そして、悪い同期を意味します。速度が心配な場合は、Webpackが最適化を行う必要があります。あなたはオプティマイザではありません。理由:jsonコマンドラインツールには同期ファイルの書き込みが必要です。チェーン内の次のアプリにデータをパイプする前に、開いているすべてのファイルを閉じる必要があります。
TamusJRoyce 2018年

27

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

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

1

Webサーバーにデータを送信する場合、データは文字列でなければなりません(here)。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

これは、promiseを使用するバージョンを使用したバリエーションfsです。

const fs = require('fs');

await fs.promises.writeFile('../data/phraseFreqs.json', JSON.stringify(output)); // UTF-8 is default
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.