2011-04-17 24 views
78

Node.jsを使用してPostBinにJSONをポストしていますが、データが間違ってフォーマットされています(http://www.postbin.org/1cpndqw参照)。Node.jsに書式設定されたJSONを書き込む

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(); 
+0

'{ "A":1、 "B":2、 "C":3}'あなたの問題を解決しましたか?データが正しく投稿されたようです。 – Raynos

+0

データは正しいが「醜い」、私はこれを理解しやすいように送りたい:http://www.postbin.org/1ijyltn#xa6rim – donald

答えて

9

まあ、JSONは、それがフォーマットされていますどのように気にしない、と自分自身をフォーマットいずれかを行っていない主な理由:

これは、私がテストに使用しているコードです。あなたが必要とするのは、javascriptのprettyprinterです。気にしているのですが、最初の質問は「なぜあなたは気にしますか?」です。

ここには、JavaScriptのレシピのprettyprintingコードがあります。

実際には、hereの異なる例がたくさんあります。

UPDATE

わかりましたので、今あなたが望むものをやっている、あなたは正しいことをやっている場合のは聞いてみましょう。いくつかの人々が指摘しているように、あなたは余分な改行やタブやスペースを送信する必要はありません。効率コストは小さく、恐らく2〜5%程度ですが、カップル・パーセンテージが必要なときは決して分かりません。

一方、私は、JSON出力をあらかじめ印刷されたテキストとして読むことができればもっと便利だということに完全に同意します。しかし、もう一つの解決策があります - あなたはまだブラウザを使ってこれらの結果を見ているでしょうから、送信用に事前に印刷するのではなく、クライアント側のプリテイプリターを使用してください。私はJSONView for ChromeJSONViewをFirefoxで使用しています。多くのデバッガもJSONの結果をあなたのためにあらかじめプリティプリントします。

+0

私はこのようなものを入手したい:http://www.postbin .org/1ijyltn#xa6rim – donald

+0

送信の目的で、余分な書式設定データを送受信したくない場合。余分な空白を持つJSONは、マシンと何の違いもないことを意味します。それを理解する必要があるのは人間にとって重要です。理想的には、あなたが実際にそれを見る必要がある人がいるときに、それをきれいに印刷したいだけです。 – entropo

+0

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

2

underscore-cliをチェックしてください。これは、JSONデータの検査と処理のためのコマンドラインツールです。

344

使用JSON.stringify(object, null, 4)ここで、4はインデントの単位として使用するスペースの数です。タブが必要な場合は、"\t"を使用することもできます。これは実際にはpart of the ECMAScript 5 specificationで、documented on MDNです。

+2

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

+0

ええ、それは奇妙です。非難や何かにつながっているのかもしれませんか?ドキュメンテーションの監視だけ?わからない。 –

+6

@PeterLyons、これはECMAScript 5仕様です。たぶん彼らは、ノード特有ではないものを文書化するような気がしなかったでしょう。 –

5

私は私が仕事に見つかった2段階のプロセスを使用:

var output = JSON.parse(insert_json_here); 
var print_to_file = JSON.stringify(output, null, "\t") 
関連する問題