Node.jsでフォーマットされたJSONを書き込む


81

Node.jsを使用してJSONをPostBinにPOSTしていますが、データの形式が正しくありません(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();

{"a":1,"b":2,"c":3}問題を修正しましたか?データが正しく投稿されたようです。
Raynos 2011

データは正しいですが、「醜い」ので、次のように送信したいと思います。わかりやすくします。postbin.org
donald

回答:


10

主に、JSONはフォーマット方法を気にせず、自分でフォーマットを行っていないためです。必要なのはjavascriptprettyprinterですが、最初の質問は「なぜ気にするのですか?」です。

これは、Javascriptレシピからのプリティプリントコードです。

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

更新

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

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


送信の目的で、余分なフォーマットデータを送受信することは望ましくありません。余分な空白を含むJSONは、マシンと何ら変わりはありません...それを理解する必要があるのは人間だけです。理想的には、実際にそれを見る必要がある人がいるときにのみ、それをきれいに印刷したいです。
エントロポ2011

@donaldなぜあなたはそれがどのように見えるかを気にするのですか?JSONは生データです。空白は気にしません。
Raynos 2011

ITは次のように機能しました:console.log(JSON.stringify({a:1、b:2、c:3}、null、 '\ t')); コンソールでは、しかしそれでも、PostBinはそれを正しくしません。多分それは彼らの問題ですか?
ドナルド2011


348

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


3
うわー、ありがとう!なぜこれがもう文書化されていないのだろうか。私はそれが利用できないと思いました。
mrjf 2012

ええ、それは奇妙です。多分それは非推奨か何かへの道にありますか?単なるドキュメントの見落とし?わからない。
Peter Lyons

6
@PeterLyons、これはECMAScript5仕様に含まれています。たぶん、彼らはノード固有ではないものを文書化する気がしなかったのかもしれません。
Matthew Flaschen 2012年

FWIW、これは本質的にどこでも文書化されているようであり、現時点ではノード固有ではないようです。
デイブニュートン

6

私は、機能することがわかった2段階のプロセスを使用しました。

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

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