在 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 格式获取结果

使用 JSON 格式的 Node.JS 从 MySQL 检索数据

我无法在 Node.js 中获取正文格式的请求

Node.js -- Ajax编程基础

在 Swift 3 中正确格式化 JSON 对象

从 Node.js 将 Json 存储到 MySQL 数据库中