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

機能について質問がありJSON.stringify()ます。

を使用するだけでは、実際にはJSON形式に出力されないことres.headersを学びました。

現時点では、JSON.stringify()内で使用できるres.xxxxxメソッドは1つだけに制限されています。問題のコードは上に貼り付けられています。複数の値を使用するにはどうすればよいですか?現時点ではres.headersvalueパラメータにのみ入力できます。また、私自身のオブジェクトを使用res.statusCodeしたいと思います。これらはすべて1つの中括弧{}で囲まれています。

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

必要なものをヘッダーオブジェクトにいつでも追加できます...

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

resノード内のオブジェクトを変更した場合に、悪い副作用があるかどうかはわかりません。心配な場合は、headersオブジェクトの浅いコピーを作成することを検討してください。

于 2013-03-04T15:42:41.487 に答える
3

JSONは常に単一の値です。したがって、出力JSON.stringifyは常に単一の値のみになります。入力を単一の値にすることも理にかなっています。これは、なぜ私の関数が2つのことを返されないのかと尋ねるようなものです。複合値を返すようにすることもできますが、それでも単一の(複合)値を返すことになります。ここでの解決策は同じです。入力を作成します。

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 に答える
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 に答える