Gereğince Mozilla de JSON docs , JSON.Stringify
ikinci parametresi vardır censor
ağaç ayrıştırılırken çocuk öğeleri görmezden / filtreye kullanılabilir. Bununla birlikte, belki de dairesel referanslardan kaçınabilirsiniz.
Node.js'de yapamayız. Böylece böyle bir şey yapabiliriz:
function censor(censor) {
var i = 0;
return function(key, value) {
if(i !== 0 && typeof(censor) === 'object' && typeof(value) == 'object' && censor == value)
return '[Circular]';
if(i >= 29) // seems to be a harded maximum of 30 serialized objects?
return '[Unknown]';
++i; // so we know we aren't using the original object anymore
return value;
}
}
var b = {foo: {bar: null}};
b.foo.bar = b;
console.log("Censoring: ", b);
console.log("Result: ", JSON.stringify(b, censor(b)));
Sonuç:
Censoring: { foo: { bar: [Circular] } }
Result: {"foo":{"bar":"[Circular]"}}
Ne yazık ki, otomatik olarak dairesel olduğunu varsaymadan önce en fazla 30 yineleme var gibi görünüyor. Aksi takdirde, bu işe yaramalıdır. Hatta kullandımareEquivalent
Buradan , ancak JSON.Stringify
30 tekrardan sonra hala istisnayı atıyor. Yine de, gerçekten ihtiyacınız varsa, nesnenin en üst düzeyde iyi bir temsilini elde etmek için yeterince iyi. Belki birileri bu konuda gelişebilir? Bir HTTP istek nesnesi için Node.js'de şunu alıyorum:
{
"limit": null,
"size": 0,
"chunks": [],
"writable": true,
"readable": false,
"_events": {
"pipe": [null, null],
"error": [null]
},
"before": [null],
"after": [],
"response": {
"output": [],
"outputEncodings": [],
"writable": true,
"_last": false,
"chunkedEncoding": false,
"shouldKeepAlive": true,
"useChunkedEncodingByDefault": true,
"_hasBody": true,
"_trailer": "",
"finished": false,
"socket": {
"_handle": {
"writeQueueSize": 0,
"socket": "[Unknown]",
"onread": "[Unknown]"
},
"_pendingWriteReqs": "[Unknown]",
"_flags": "[Unknown]",
"_connectQueueSize": "[Unknown]",
"destroyed": "[Unknown]",
"bytesRead": "[Unknown]",
"bytesWritten": "[Unknown]",
"allowHalfOpen": "[Unknown]",
"writable": "[Unknown]",
"readable": "[Unknown]",
"server": "[Unknown]",
"ondrain": "[Unknown]",
"_idleTimeout": "[Unknown]",
"_idleNext": "[Unknown]",
"_idlePrev": "[Unknown]",
"_idleStart": "[Unknown]",
"_events": "[Unknown]",
"ondata": "[Unknown]",
"onend": "[Unknown]",
"_httpMessage": "[Unknown]"
},
"connection": "[Unknown]",
"_events": "[Unknown]",
"_headers": "[Unknown]",
"_headerNames": "[Unknown]",
"_pipeCount": "[Unknown]"
},
"headers": "[Unknown]",
"target": "[Unknown]",
"_pipeCount": "[Unknown]",
"method": "[Unknown]",
"url": "[Unknown]",
"query": "[Unknown]",
"ended": "[Unknown]"
}
Bunu yapmak için küçük bir Node.js modülü oluşturdum: https://github.com/ericmuyser/stringy Geliştirmek / katkıda bulunmaktan çekinmeyin!
pagedoc
?