Gemäß den JSON - Dokumente bei Mozilla , JSON.Stringify
hat einen zweiten Parameter censor
, die Filter verwendet werden kann / Kinder Elemente ignorieren , während die Baum Parsen. Vielleicht können Sie jedoch die Zirkelverweise vermeiden.
In Node.js können wir nicht. Also können wir so etwas machen:
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)));
Das Ergebnis:
Censoring: { foo: { bar: [Circular] } }
Result: {"foo":{"bar":"[Circular]"}}
Leider scheint es maximal 30 Iterationen zu geben, bevor automatisch angenommen wird, dass es kreisförmig ist. Andernfalls sollte dies funktionieren. Ich habe es sogar areEquivalent
von hier aus verwendet , aber JSON.Stringify
nach 30 Iterationen wird immer noch die Ausnahme ausgelöst. Trotzdem ist es gut genug, um eine anständige Darstellung des Objekts auf oberster Ebene zu erhalten, wenn Sie es wirklich brauchen. Vielleicht kann jemand das verbessern? In Node.js für ein HTTP-Anforderungsobjekt erhalte ich Folgendes:
{
"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]"
}
Ich habe ein kleines Node.js-Modul erstellt, um dies hier zu tun: https://github.com/ericmuyser/stringy Fühlen Sie sich frei, sich zu verbessern / beizutragen!
pagedoc
?