11
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和我自己的对象,所有对象都在一个大括号 {} 下进行字符串化。

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

4

5 回答 5

19

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

var obj = {};
obj.headers = res.headers;
obj.somethingelse = somethingelse;
var string = JSON.stringify(obj);
于 2013-03-04T15:43:38.877 回答
3

JSON 始终是单个值。所以输出输出JSON.stringify总是只能是一个值。将输入也设为单个值也是有意义的。这就像问为什么我的函数不能返回两件事?您可以让它返回一些复合值,但这意味着您仍然返回单个(复合)值。这里的解决方案是相同的,编写您的输入。

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

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

于 2013-03-04T15:44:05.183 回答
3

您可以随时将您想要的额外内容添加到 headers 对象...

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

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

于 2013-03-04T15:42:41.487 回答
2

headers您还可以对对象的一部分进行字符串化:

JSON.stringify(res, …)

如果您只想对对象的某些部分进行字符串化,您可以

  • replacer用函数过滤它们,
  • delete之前的一切,
  • 或构建一个要字符串化的新对象:

    JSON.stringify({
        heads: res.headers,
        …
    }, …)
    
于 2013-03-04T15:46:25.800 回答
2

如果您想展平多个对象,可以使用此功能。

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);
于 2013-03-04T15:51:52.833 回答