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

那么,主要是因为JSON不关心它是如何格式化的,而且你自己也没有做任何格式化。 你需要的是一个JavaScript漂亮的打印机,如果你在意,但第一个问题是“你为什么在意?”

这是来自Javascript食谱的一个漂亮的代码。

其实这里有很多不同的例子。

UPDATE

好吧,现在就做你想做的事吧,让我们来问一下,如果你做的是对的。 正如几位人士指出的那样,您不需要传输这些额外的换行符或制表符或空格; 效率成本很低,大概在2-5%左右,但是你永远不知道什么时候可能需要几个百分点。

另一方面,我完全同意,能够将JSON输出作为漂亮的文本读取会更加方便。 但还有另外一个解决scheme – 你仍然可能使用浏览器来查看这些结果,所以不要使用漂亮的打印来传输,而是使用客户端的漂亮打印机。 我在Firefox中使用JSONView和Chrome和JSONView 。 许多debugging器也会为您打印JSON结果。

使用JSON.stringify(object, null, 4)其中4是用作缩进单位的空格数。 如果你想要标签,你也可以使用"\t" 。 这实际上是ECMAScript 5规范的一部分 ,并logging在MDN上 。

我用了两个步骤,我发现工作:

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

您应该查看underscore-cli – 这是一个用于检查和处理JSON数据的命令行工具。