JSON.stringify()只允许一个值参数。 如何添加更多的参数在一个大括号下被串化?

http.get(options, function(res){ fs.appendFile('log.txt', JSON.stringify(res.headers, null, 4)); }) 

我有一个关于JSON.stringify()函数的问题。

我已经知道,简单地使用res.headers实际上不会输出为JSON格式。

目前,我只能在JSON.stringify()中使用一个res.xxxxx方法。 有问题的代码粘贴在上面。 我如何能够使用多个值? 目前,我只能将res.headers放入value参数中。 我也想使用res.statusCode和我自己的对象,所有的对象都在一个括号{}下被res.statusCode

JSON.Stringify的参数如下: JSON.stringify(value, [replacer], [space]);

您需要创build一个新的js对象并将res.headers放入其中。

 var obj = {}; obj.headers = res.headers; obj.somethingelse = somethingelse; var string = JSON.stringify(obj); 

JSON始终是一个单一的值。 所以输出JSON.stringify总是只能是一个值。 input也是单一值也是有意义的。 这就像问为什么我的函数不能返回两个东西? 您可以使其返回一些复合值,但这意味着您仍然返回一个(复合)值。 这里的解决scheme是相同的,撰写您的input。

 var reply = { code: res.statusCode, headers: parse_http_headers(res.headers), etc: /* etc */ }; log(JSON.stringify(reply)); 

请注意,您必须自己编写parse_http_headers

你总是可以添加额外的东西你想要的标题对象…

 res.headers.statusCode = res.statusCode JSON.stringify(res.headers, null, 4); 

我不知道是否有任何不良的副作用,如果你改变节点中的res对象。 如果您担心这一点,您可能需要考虑创build标题对象的浅表副本。

你也可以把你的对象的headers部分串起来。

 JSON.stringify(res, …) 

如果你想只对你的对象的某些部分,你可以

  • 使用replacerfunction过滤它们,
  • 之前delete一切,
  • 或者构build一个新的对象进行string化:

     JSON.stringify({ heads: res.headers, … }, …) 

如果你想压扁几个对象,你可以使用这个函数。

 function merge() { var out = {}; insert = function(e) { for (var i in e) { if (Object.prototype.hasOwnProperty.call(e, i)) out[i] = e[i]; } }; for (var i = 0; i < arguments.length; i++) { insert(arguments[i]); } return out; } var a = {'a': 'aa'}; var b = {'b': 'bb', 'bbb': 'bbbb'}; var c = {'c': 'cc'}; var combined = merge(a,b,c);