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, …)
如果你想只对你的对象的某些部分,你可以
- 使用
replacer
function过滤它们, - 之前
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);