82

Node.js を使用して JSON を PostBin に POST していますが、データが間違ってフォーマットされています (ここでわかるように: http://www.postbin.org/1cpndqw )。

これは私がtestTに使用しているコードです:

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();
4

4 に答える 4

351

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

于 2012-06-30T17:25:39.963 に答える
10

主な理由は、JSON がどのようにフォーマットされているかを気にせず、自分でフォーマットを行っていないためです。気にするなら、必要なのは JavaScript のプリティプリンターですが、最初の質問は「なぜ気にするのですか?」です。

Javascript Recipesのprettyprintingコードを次に示します。

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

アップデート

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

一方で、JSON 出力をきれいに印刷されたテキストとして読み取ることができる方がはるかに便利であることに完全に同意します。しかし、別の解決策があります。これらの結果を表示するためにまだブラウザを使用している可能性があるため、送信用にプリティプリントする代わりに、クライアント側のプリティプリンタを使用します。ChromeではJSONViewを、Firefox ではJSONViewを使用しています。多くのデバッガーは、JSON の結果もプリティプリントします。

于 2011-04-17T14:15:47.983 に答える
7

うまくいくことがわかった2段階のプロセスを使用しました。

var output = JSON.parse(insert_json_here);
var print_to_file = JSON.stringify(output, null, "\t")
于 2017-03-29T20:18:27.630 に答える
2

underscore-cliを確認してください。これは、JSON データを検査および処理するためのコマンドライン ツールです。

于 2012-04-29T21:20:57.850 に答える