मोज़िला में JSON डॉक्स के अनुसार , JSON.Stringify
एक दूसरा पैरामीटर है censor
जिसका उपयोग पेड़ को पार्स करते समय बच्चों की वस्तुओं को फ़िल्टर / अनदेखा करने के लिए किया जा सकता है। हालांकि, शायद आप परिपत्र संदर्भों से बच सकते हैं।
Node.js में हम नहीं कर सकते। तो हम ऐसा कुछ कर सकते हैं:
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)));
परिणाम:
Censoring: { foo: { bar: [Circular] } }
Result: {"foo":{"bar":"[Circular]"}}
दुर्भाग्य से वहाँ अधिकतम 30 पुनरावृत्तियों लगता है इससे पहले कि यह स्वचालित रूप से यह परिपत्र है मानता है। अन्यथा, यह काम करना चाहिए। मैंने यहां areEquivalent
से भी उपयोग किया , लेकिन JSON.Stringify
30 पुनरावृत्तियों के बाद भी अपवाद को फेंकता है। फिर भी, शीर्ष स्तर पर वस्तु का एक अच्छा प्रतिनिधित्व प्राप्त करना काफी अच्छा है, अगर आपको वास्तव में इसकी आवश्यकता है। हालांकि किसी को इस पर सुधार कर सकते हैं? HTTP अनुरोध वस्तु के लिए Node.js में, मुझे मिल रहा है:
{
"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]"
}
मैंने यह करने के लिए एक छोटा सा Node.js मॉड्यूल बनाया है: https://github.com/ericmuyser/stringy सुधार / योगदान के लिए स्वतंत्र महसूस करें!
pagedoc
?