node.jsを使用してJSONをきれいに出力するにはどうすればよいですか?


435

これは解決された問題のようですが、解決策を見つけることができません。

基本的に、私はJSONファイルを読み取り、キーを変更し、新しいJSONを同じファイルに書き戻します。すべて機能しますが、JSONのフォーマットが緩んでいます。

{
  name:'test',
  version:'1.0'
}

私は得る

{name:'test',version:'1.1'}

Node.jsに適切にフォーマットされたJSONをファイルに書き込む方法はありますか?


JSON.stringify循環オブジェクトをチョークし、util.inspect有効なjsonを生成しません。:\ NodeJSでJSONをきれいに印刷するための[ネイティブ]ソリューションは見つかりませんでした
ThorSummoner

@ThorSummoner:これは、NodeではなくJSONの問題です。JSONは循環参照をネイティブでサポートしていません。別の質問で、ここに解決策があります。
サーシャチェディゴフ2018年

回答:


813

JSON.stringifyの3番目のパラメーターは、プリティプリント用の空白挿入を定義します。文字列または数値(スペースの数)を指定できます。ノードはでファイルシステムに書き込むことができますfs。例:

var fs = require('fs');

fs.writeFile('test.json', JSON.stringify({ a:1, b:2, c:3 }, null, 4));
/* test.json:
{
     "a": 1,
     "b": 2,
     "c": 3,
}
*/

MDNのJSON.stringify()のドキュメントNode fsのドキュメントを参照してください


1
注:"\t"タブが必要な場合は、4の代わりに使用してください。
Jeremy Thille

:最新nodejsでは、この答えを見、三番目のパラメータとしてコールバック関数を提供する必要がstackoverflow.com/a/11677276/675065
アルプ

216

これは便利だと思います...サンプルコードが大好きです:)

var fs = require('fs');

var myData = {
  name:'test',
  version:'1.0'
}

var outputFilename = '/tmp/my.json';

fs.writeFile(outputFilename, JSON.stringify(myData, null, 4), function(err) {
    if(err) {
      console.log(err);
    } else {
      console.log("JSON saved to " + outputFilename);
    }
}); 

3
tmpフォルダが存在することを確認してください。存在しない場合、失敗する可能性があります。
ラリーバトル

2
ほとんどのUNIXシステム(MacとLinuxを含みます。BSDを思い出した場合)では、tmpデフォルトでフォルダが存在します
Antony

ウィンドウの場合に指定する場所(出力ファイル名)は何
ですか

コールバックなしでファイルが書き込まれなかった(空の状態で開いただけの)理由がわかりません...または、非同期で、アプリの起動中に例外がスローされたために機能しませんでしたか?
Tomasz Gandor 2017

1
おかげで、とても助かりました。
スラジュジャイン

83

オブジェクトをきれいに出力し、それを有効なJSONとしてエクスポートしたくない場合は、を使用できますconsole.dir()

構文強調、スマートインデントを使用し、キーから引用符を削除して、出力をできるだけきれいにします。

const jsonString = `{"name":"John","color":"green",
                     "smoker":false,"id":7,"city":"Berlin"}`
const object = JSON.parse(jsonString)

console.dir(object, {depth: null, colors: true})

ログに記録されたオブジェクトのスクリーンショット

内部的には、のショートカットですconsole.log(util.inspect(…))。唯一の違いはinspect()、オブジェクトで定義されたカスタム関数をバイパスすることです。


8
console.dirは有効なjsonを生成しません。
Gregg Lind

1
@GreggLind回答でそれを明確にした!
adius

これにより、高速サーバーが停止しました。理由はわかりません:(
Sanket Berde

34

これをどこにも保存したくない場合は、デバッグ目的でオブジェクトを表示してください。

console.log(JSON.stringify(object, null, "  "));

3番目のパラメーターを変更して、インデントを調整できます。


1
私はこのソリューションを探していました-これまでにない!最後のパラメーターは魅力のように機能します!
vt2424253

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.