Gereğince Mozilla de JSON docs , JSON.Stringifyikinci parametresi vardır censorağ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.Stringify30 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?