在 Node.js 中编写格式化的 JSON
Posted
技术标签:
【中文标题】在 Node.js 中编写格式化的 JSON【英文标题】:Write formatted JSON in Node.js 【发布时间】:2011-08-07 07:56:43 【问题描述】:我正在使用 Node.js 将 JSON POST 到 PostBin,但数据格式错误(如您在此处看到的:http://www.postbin.org/1cpndqw)。
这是我用于测试的代码:
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
你的问题解决了吗?您似乎正确发布了数据。
数据正确但“丑”,我想这样发送,更容易理解:postbin.org/1ijyltn#xa6rim
【参考方案1】:
使用JSON.stringify(object, null, 4)
其中4
是用作缩进单位的空格数。如果你想要标签,你也可以使用"\t"
。这实际上是part of the ECMAScript 5 specification,是documented on MDN。
【讨论】:
哇,谢谢!我想知道为什么不再记录这一点。我以为它不可用。 是的,这很奇怪。也许它正在走向弃用或其他什么?只是文件疏忽?不确定。 @PeterLyons,这在 ECMAScript 5 规范中。也许他们只是不想记录不是特定于节点的东西。 FWIW,这似乎基本上到处都有记录,而且到目前为止似乎不是特定于节点的。【参考方案2】:嗯,主要是因为 JSON 不关心它是如何格式化的,而且您自己也没有进行任何格式化。你需要的是一个 javascript prettyprinter,如果你关心的话,但第一个问题是“你为什么关心?”
这是来自 Javascript 食谱的 prettyprinting 代码。
实际上,SO 上有很多不同的示例here。
更新
好的,现在它正在做你想做的事,让我们问问你是否做对了。正如一些人指出的那样,您不需要传输那些额外的换行符和制表符或空格。效率成本很小,可能在 2-5% 左右,但你永远不知道什么时候可能需要几个百分点。
另一方面,我完全同意将 JSON 输出作为漂亮打印文本读取会更方便。但是还有另一种解决方案——您可能仍在使用浏览器查看这些结果,因此不要使用漂亮的打印来传输,而是使用客户端的漂亮打印机。我在 Firefox 中使用 JSONView for Chrome 和 JSONView。许多调试器也会为您漂亮地打印 JSON 结果。
【讨论】:
出于传输目的,您不想发送/接收额外的格式化数据。带有额外空格的 JSON 与机器没有什么不同……它只对需要理解它的人很重要。理想情况下,您只想在确实有人需要查看它时将其漂亮地打印出来。 @donald 为什么你关心它的外观? JSON 是原始数据。你不关心空格。 它的作用是:console.log(JSON.stringify( a:1, b:2, c:3 , null, '\t'));在控制台中,但 PostBin 仍然无法正确处理。也许是他们的问题? developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…【参考方案3】:我使用了一个我发现可行的两步过程:
var output = JSON.parse(insert_json_here);
var print_to_file = JSON.stringify(output, null, "\t")
【讨论】:
【参考方案4】:您应该查看underscore-cli - 这是一个用于检查和处理 JSON 数据的命令行工具。
【讨论】:
以上是关于在 Node.js 中编写格式化的 JSON的主要内容,如果未能解决你的问题,请参考以下文章
Node.js 解析 HTML 表并以 JSON 格式获取结果