जावास्क्रिप्ट JSON.serialize के बजाय JSON.stringify का उपयोग क्यों करता है?


18

मैं बस के बारे में सोच रहा हूँ "stringify" बनाम "serialize" । मेरे लिए वे एक ही बात कर रहे हैं (हालांकि मैं गलत हो सकता है), लेकिन मेरे पिछले अनुभव में (ज्यादातर साथ ) मैं उपयोग करता हूं Serialize()और कभी उपयोग नहीं करता Stringify()

मुझे पता है कि मैं जावास्क्रिप्ट में एक साधारण उपनाम बना सकता हूं,

// either
JSON.serialize = function(input) {
    return JSON.stringify(input);
};

// or
JSON.serialize = JSON.stringify;

http://jsfiddle.net/HKKUb/

लेकिन मैं सिर्फ दोनों के बीच के अंतर के बारे में सोच रहा हूं और कड़े को क्यों चुना गया।


तुलनात्मक उद्देश्य के लिए, यहां बताया गया है कि आप XML को C # में स्ट्रिंग के लिए कैसे अनुक्रमित करते हैं।

public static string SerializeObject<T>(this T toSerialize)
{
    XmlSerializer xmlSerializer = new XmlSerializer(toSerialize.GetType());
    StringWriter textWriter = new StringWriter();

    xmlSerializer.Serialize(textWriter, toSerialize);
    return textWriter.ToString();
}

7
वास्तव में आप बस नहीं कर सकते JSON.serialize = JSON.stringify?
डेनियल डिपोलो सेप

आप क्यों कर सकते हैं।
बजे चेस फ्लोरल सेप

1
मुझे लगता है कि मेरे प्रश्न को फिर से पढ़ने के बाद, मैं देख रहा हूं कि मेरे C # उदाहरण में, मैं XML सीरियल कर रहा हूं और धारावाहिक ऑब्जेक्ट को परिवर्तित कर रहा हूं ToString();। वहां रगड़ लगाता है।
चेस फ्लोरेल

मैं निरंतरता के लिए अनुमान लगाता हूं, यह मेरे लिए बेहतर होगा (मेरे लिए) एक ऐसी विधि है जो इस तरह दिखती है ... JSON.serialize(obj).toString();या jsonObject().toString();... इस तरह यह मेरी सी # की तरह दिखेगी ... लेकिन अब मैं इसे जटिल कर रहा हूं।
चेस फ्लोरल सेप

जवाबों:


12

प्रश्न पर दो टिप्पणियों पर एक करीब से नज़र डालें:

मुझे लगता है कि मेरे प्रश्न को फिर से पढ़ने के बाद, मैं देख रहा हूं कि मेरे C # उदाहरण में, मैं XML को अनुक्रमित कर रहा हूं और धारावाहिक ऑब्जेक्ट ToString () में परिवर्तित कर रहा हूं; वहां रगड़ लगाता है।

तथा

मैं निरंतरता के लिए अनुमान लगाता हूं, यह मेरे लिए बेहतर होगा (एक विधि) जो इस तरह दिखता है ... JSON.serialize (obj) .toString (); या jsonObject ()। toString (); ... इस तरह यह बहुत हद तक मेरे C # की तरह दिखेगा ... लेकिन अब मैं इसे जटिल कर रहा हूं।

अब याद रखें कि जावास्क्रिप्ट में, एक वस्तु एक हैश है (बल्कि, यदि प्रोटोटाइप या किसी अन्य ढांचे का उपयोग करते हुए, यह "विशेष प्रकार के हैश" के रूप में योग्य होना चाहिए - लेकिन सरल रूप इस उदाहरण के लिए काम करता है):

var obj = {
   foo: 1,
   bar: function() { console.log(this.foo); }
}
obj.foo; // 1
obj.bar; // function reference
obj.bar(); // function call
obj['foo']; // 1
obj['bar']; // function reference
obj['bar'](); // function call

serialize()जावास्क्रिप्ट में केवल एक कारण आवश्यक हो सकता है, कार्य, अन्य वस्तुओं के संदर्भ आदि को काट देना।

इसलिए, अपने C # उदाहरण पर वापस जाने के लिए - हमने .Serialize()अनावश्यक के रूप में कटौती की है । एक वस्तु एक हैश है, यह पहले से ही क्रमबद्ध है, आगे "क्रमांकन" को मैन्युअल रूप से अपने कोड में वैसे भी करना होगा। वह सब जो तुम छोड़ो .ToString()

है .stringify()अब और अधिक समझ बनाने?


हाँ, कठोर समझ में आता है, हालांकि मैं अभी भी उपयोग करना चाहता हूं.toString()
चेस फ्लोरल

7
.String का मतलब कुछ भी हो सकता है। JSON.stringify स्पष्ट रूप से JSON है।
ब्रैंडन

11

ऐसा इसलिए है क्योंकि JSON नोटेशन को 2002 के बाद 1999 में निर्दिष्ट किया गया था ( asp.netउस वर्ष जारी किया गया था)। इसलिए मुझे लगता है कि वे के बारे में पता नहीं था serialize

मज़ाक को अलग रखें,

यह शब्द सुनकर serialization, पहली बात जो मेरे दिमाग में आती है, वह डेटा को बाइट्स में परिवर्तित करने की तरह है, यहां JSON.stringify एकदम सही अर्थ देता है क्योंकि यह ऑब्जेक्ट को एक स्ट्रिंग प्रतिनिधित्व नहीं एक स्ट्रिंग प्रतिनिधित्व में परिवर्तित करता है।

पुनश्च:

@ काजल फ्लोरल, आप सिर्फ जोड़ नहीं सकते JSON.serialize, जैसे कि सख्त मोड में, यह कोड वास्तव में कुछ ब्राउज़रों में विफल हो सकता है।

जैसा JSONकि आपका औसत ऑब्जेक्ट नहीं है।


मुझे लगता है कि मेरे (सीमित) अनुभव में, सीरीज़िंग कुछ हमेशा फ्लैट फाइल स्टोरेज के लिए इसे स्ट्रिंग के कुछ रूप में परिवर्तित कर रहा है। मुझे वही मिल रहा है जो आप कह रहे हैं।
चेस फ्लोरल सेप

मुझे लगा कि यह 2001 है .. विकिपीडिया देखें । नाम शायद डगलस क्रॉकफोर्ड की व्यक्तिगत पसंद था। 1999 वह वर्ष है जब 3rd ECMA मानक सामने आया था, जिस पर JSON की स्थापना की गई थी।
मार्टिज़न पीटर 15

1
@ कैफफ्लोरेल सीरियलिंग का शाब्दिक अर्थ है कि मेमोरी ऑब्जेक्ट को एक क्रमिक रूप से सन्निहित डेटा प्रारूप में बदलना, ताकि यह परमाणु रूप से सम्‍मिलित हो, मेरा मानना ​​है कि ऐसा करने का एक और अधिक सामान्य तरीका यह है कि यह उप-प्रतिनिधित्व प्रतिनिधित्व होगा, पूरे नेटवर्क या अन्य को भेजने के लिए।
जिमी हॉफ़ा

@avinashr, re: your ps: edit ... यह फ़ेल्ड विफल नहीं लगता है। क्या आप बता सकते हैं कि " JSONआपकी औसत वस्तु कैसे नहीं है"? मैं कर्कश नहीं हो रहा हूं, आप क्या मतलब है, इस पर अस्पष्ट हैं।
चेस फ्लोरेल

2
@ChaseFlorell जावास्क्रिप्ट के संबंध में सही है, JSON मान्य जावास्क्रिप्ट वस्तुओं का एक सबसेट है। एक साधारण उदाहरण के लिए मेरा उत्तर देखें: सभी वैध JSON एक मान्य जावास्क्रिप्ट ऑब्जेक्ट / हैश है, लेकिन सभी जावास्क्रिप्ट ऑब्जेक्ट / हैश वैध JSON नहीं हैं। यह नाम में भी है - JSON का अर्थ "जावास्क्रिप्ट ऑब्जेक्ट संकेतन" है।
इज़काता
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.