web-dev-qa-db-ja.com

Node.jsでフォーマットされたJSONを記述する

Node.jsを使用してPOST JSONをPostBinに送信していますが、データの形式が間違っています(ここで確認できます: http://www.postbin.org/1cpndqw )。

これは、tesTに使用しているコードです。

var http = require('http');

var options = {
  Host: 'www.postbin.org',
  port: 80,
  path: '/1cpndqw',
  method: 'POST'
};

var req = http.request(options, function(res) {
  console.log('STATUS: ' + res.statusCode);
  console.log('HEADERS: ' + JSON.stringify(res.headers));
  res.setEncoding('utf8');
  res.on('data', function (chunk) {
    console.log('BODY: ' + chunk);
  });
});

req.write(JSON.stringify({ a:1, b:2, c:3 }, null, 4));
req.end();
79
donald

そもそも、JSONはどのようにフォーマットされているか気にせず、自分でフォーマットを行っていないからです。必要なのは、javascript prettyprinterですが、気にするなら、最初の質問は「なぜ気にするのですか?」です。

Javascript Recipesの prettyprinting コードです。

実際には、さまざまな例がたくさんあります here SO.

[〜#〜] update [〜#〜]

さて、今はあなたが望むことをやっているので、あなたが正しいことをしているかどうか聞いてみましょう。数人が指摘しているように、これらの余分な改行やタブ、またはスペースを送信する必要はありません。効率コストは小さく、おそらく2〜5%程度ですが、いつ2〜3%が必要になるかわかりません。

一方、JSON出力をprettyprintedテキストとして読み取ることができる方がはるかに便利であることに完全に同意します。しかし、別の解決策があります。おそらく、これらの結果を見るためにブラウザーを使用しているので、送信用にprettyprintingする代わりに、クライアント側のprettyprinterを使用してください。 Firefoxでは JSONView for Chrome および JSONView を使用しています。多くのデバッガーもJSON結果をきれいに出力します。

10
Charlie Martin

JSON.stringify(object, null, 4)を使用します。4は、インデントの単位として使用するスペースの数です。タブが必要な場合は、"\t"を使用することもできます。これは実際には ECMAScript 5仕様の一部 であり、 MDNに文書化されています です。

345
Peter Lyons

動作することがわかった2段階のプロセスを使用しました。

var output = JSON.parse(insert_json_here);
var print_to_file = JSON.stringify(output, null, "\t")
6
Fritz Dodoo

nderscore-cli をチェックアウトする必要があります-これはJSONデータを検査および処理するためのコマンドラインツールです。

2
Dave Dopson