【问题标题】:Write formatted JSON in Node.js在 Node.js 中编写格式化的 JSON
【发布时间】: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

标签: javascript json node.js webhooks


【解决方案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 ChromeJSONView。许多调试器也会为您漂亮地打印 JSON 结果。

【讨论】:

  • 出于传输目的,您不想发送/接收额外的格式化数据。带有额外空格的 JSON 与机器没有什么不同……它只对需要理解它的人很重要。理想情况下,您只想在确实有人需要查看它时将其漂亮地打印出来。
  • @donald 为什么你关心它的外观? JSON 是原始数据。你不关心空格。
  • 它的作用是:console.log(JSON.stringify({ a:1, b:2, c:3 }, null, '\t'));在控制台中,但 PostBin 仍然无法正确处理。也许是他们的问题?
【解决方案3】:

我使用了一个我发现可行的两步过程:

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2016-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多