वहाँ से पहले अपने replacer कहा जाता है करने के लिए एक रास्ता है एक वस्तु की अपनी toJSON
यह बदल देती है, ताकि मैं वस्तु या अपने प्रोटोटाइप पर toJSON
अधिभावी के बिना नहीं बल्कि अपने JSON के अनुकूल रूप से मूल वस्तु, साथ काम कर सकते , ऑब्जेक्ट को प्री-प्रोसेस करना, या JSON.stringify
का अपना संस्करण लिखना?ऑब्जेक्ट के toJSON * से पहले replacer * को कॉल करें?
उदाहरण के लिए: मान लीजिए कि मैं उनके सामान्य क्रमिकरण (which is toISOString
) से अलग Date
उदाहरणों को क्रमबद्ध करना चाहता हूं। समस्या है, यह एक स्ट्रिंग (नीचे स्निपेट देखें) क्योंकि Date.prototype.toJSON
मेरी replacer से पहले कहा जाता है देखता है (यह सवाल नहीं विशिष्ट Date
के लिए, यह सिर्फ एक उदाहरण है।), मेरे replacer Date
वस्तु नहीं देखता ।
var obj = {
d: new Date()
};
snippet.log(getType(obj.d)); // "[object Date]"
var json = JSON.stringify(obj, function(key, value) {
if (key === "d") {
snippet.log(getType(value)); // "string" <== Want to see a Date here
}
return value;
});
function getType(value) {
var to = typeof value;
if (to === "object") {
to = Object.prototype.toString.call(value);
}
return to;
}
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
वहाँ एक रास्ता replacer पहले कहा जाता प्राप्त करने के लिए है? मैं Date.prototype.toJSON
को ओवरराइड नहीं करना चाहता, ऑब्जेक्ट को प्री-प्रोसेस कर सकता हूं, या अपना खुद का JSON.stringify
लिखना चाहता हूं, लेकिन मुझे कोई और तरीका नहीं दिख रहा है।
सुंदर। यह भी [असाधारण मामले के लिए काम करता है] (http://jsbin.com/zeciqiwawo/1) जहां आप एक दस्तावेज़ खंड ('JSON.stringify (नई तिथि()) को स्ट्रिंग कर रहे हैं '), पूरे दस्तावेज़ नहीं, धन्यवाद [चरण 9-11] (http://www.ecma-international.org/ecma-262/5.1/#sec-15.12.3)। –
वास्तव में अच्छा है .. –