2013-05-09 6 views
16

जब एक वस्तु JSON.stringify (या कुछ इसी तरह) का उपयोग कर वहाँ stringification गहराई को सीमित करने के लिए एक रास्ता है stringifying, यानी केवल वस्तु पेड़ में गहरी n स्तरों जाने के लिए और सब कुछ है कि उसके बाद आता है पर ध्यान न दें (या बेहतर : वहां प्लेसहोल्डर्स डाल दें, जो कुछ इंगित करता है)?सीमा JSON stringification गहराई

मुझे पता है कि JSON.stringify फॉर्म function (key, value) के एक प्रतिकृति फ़ंक्शन लेता है लेकिन मुझे वर्तमान कुंजी-मूल्य-जोड़ी की मूल वस्तु में गहराई को प्रतिलिपि कार्य करने के लिए कोई रास्ता नहीं मिला।

क्या डिफ़ॉल्ट JSON.stringify कार्यान्वयन के साथ ऐसा करने का कोई तरीका है? या मैं एक ऐसे बिंदु पर पहुंच गया हूं जहां मुझे केवल स्ट्रिंगफिकेशन को लागू करना चाहिए? या क्या कोई अन्य स्ट्रिंग लाइब्रेरी है जिसे आप अनुशंसा कर सकते हैं कि यह विकल्प है?

+1

ऐसा लगता है कि इस प्रश्न के स्वीकृत उत्तर सहायक हो सकते हैं: http://stackoverflow.com/questions/13861254/json-stringify-deep-objects – Strille

+0

@Strille एचएम, इसमें एक कार्यान्वयन होता है जो मैं चाहता हूं। मैं इसे लेता हूं, इसका मतलब है कि डिफ़ॉल्ट कार्यान्वयन के साथ यह संभव नहीं है? मैं डिफ़ॉल्ट कार्यान्वयन का उपयोग करता हूं, क्योंकि मुझे लगता है कि यह तेजी से लागू होने के बाद से तेज़ है। लेकिन सूचक के लिए धन्यवाद! –

+0

नहीं, मुझे पूरा यकीन है कि डिफ़ॉल्ट कार्यान्वयन दुर्भाग्य से आप जो भी पूछते हैं वह नहीं कर सकता है। – Strille

उत्तर

1

अपनी ऑब्जेक्ट का एक गहरा क्लोन बनाएं (लाइब्रेरी के साथ low-dash), जो भी आप करना चाहते हैं वह करें और फिर इसे JSON.stringify पर पास करें। मैं JSON.stringify को फिर से आविष्कार करने की कोशिश नहीं करता, यह गलत जगह पर प्रयास है।

[संपादित करें] लगता है कि किसी ने पहले ही किया था कि तुम क्या सुझाव दे गया: JSON.stringify deep objects

मेरा सुझाव नहीं होगा हालांकि इस वजह से देशी JSON.stringify हमेशा तेजी से होने के लिए और जा रहा है और अधिक मजबूत

[संपादित करें] यहाँ एक पुस्तकालय है कि ऐसा लगता है कि आप क्या चाहते: http://philogb.github.io/jit/static/v20/Docs/files/Core/Core-js.html# $ jit.json.prune

+0

आपका मतलब है * सीमित गहराई क्लोन *? – Bergi

+0

हाँ ऐसा कर सकता है, कॉपी और काटने से अधिक कुशल हो सकता है –

2

मैं एक तृतीय-पक्ष लाइब्रेरी को शामिल किए बिना पहले स्तर पर एक वस्तु stringify करना चाहता था/बहुत अधिक कोड

var json = JSON.stringify(obj, function (k, v) { return k ? "" + v : v; }); 

उदाहरण::

var obj = { 
 
    keyA: "test", 
 
    keyB: undefined, 
 
    keyC: 42, 
 
} 
 
obj.keyD = obj; 
 

 
var json = JSON.stringify(obj, function (k, v) { return k ? "" + v : v; }); 
 
console.log(json);

एक जोड़ कर

मामले में आप एक ही देखने के लिए, यहाँ एक त्वरित एक लाइनर ऐसा करने के लिए है मान से पहले खाली स्ट्रिंग, यह स्वचालित रूप से स्ट्रिंग के लिए मान डालेगा। हालांकि, हमें यह सुनिश्चित करने के लिए कुंजी जांचनी होगी कि जब कास्ट शून्य या अपरिभाषित न हो, तो कास्ट न करें।

संबंधित मुद्दे