jQuery.parseJSON बनाम JSON.parse


79

jQuery.parseJSONऔर JSON.parseदो कार्य हैं जो समान कार्य करते हैं। यदि jQuery लाइब्रेरी पहले से लोड है, तो प्रदर्शन के मामले में, jQuery.parseJSONउपयोग करने से बेहतर होगा JSON.parse?

यदि हाँ, तो क्यों? यदि नहीं, तो क्यों नहीं?


1
मुझे लगता है कि JSON.parse पुराने ब्राउज़रों में उपलब्ध नहीं है। गति के संदर्भ में वे समान होने चाहिए, JSON.parse थोड़ा अधिक तेज़ होना चाहिए (मुझे लगता है कि jQuery नए ब्राउज़र में JSON.parse का उपयोग करता है)।

जवाबों:


112

यहाँ jQuery 1.9.1 से एक उद्धरण है :

parseJSON: function( data ) {
    // Attempt to parse using the native JSON parser first
    if ( window.JSON && window.JSON.parse ) {
        return window.JSON.parse( data );
    }

    if ( data === null ) {
        return data;
    }

    if ( typeof data === "string" ) {

        // Make sure leading/trailing whitespace is removed (IE can't handle it)
        data = jQuery.trim( data );

        if ( data ) {
            // Make sure the incoming data is actual JSON
            // Logic borrowed from http://json.org/json2.js
            if ( rvalidchars.test( data.replace( rvalidescape, "@" )
                .replace( rvalidtokens, "]" )
                .replace( rvalidbraces, "")) ) {

                return ( new Function( "return " + data ) )();
            }
        }
    }

    jQuery.error( "Invalid JSON: " + data );
},

जैसा कि आप देख सकते हैं, JSON.parseअगर यह उपलब्ध है, तो jQuery मूल विधि का उपयोग करेगा , और अन्यथा यह उस डेटा का मूल्यांकन करने की कोशिश करेगा new Function, जो इस तरह का है eval

तो हां, आपको जरूर इस्तेमाल करना चाहिए jQuery.parseJSON


3
वाह, शानदार जवाब! सभी को धन्यवाद, मुझे लगता है कि तुम्हारा सबसे व्यापक जवाब है।
प्रश्न ओवरफ्लो

आपके जैसन कहां से आते हैं, इसके आधार पर, फ़ॉलबैक 'eval' पद्धति के साथ सुरक्षा मुद्दे हो सकते हैं।
स्टीव मेने

Rvalidchars.test सामान को अमान्य JSON को पकड़ना चाहिए; इसलिए यह काफी सुरक्षित लगता है।
डैनियल

6
ध्यान दें कि यह पुराना है, और एक खाली स्ट्रिंग अब शून्य नहीं लौटेगी। यह बजाय एक त्रुटि फेंक देंगे।
mlissner

3
हां, मुझे लगता है कि इस उत्तर को अपडेट किया जाना चाहिए कि इसके लिए jQuery जैसी बड़ी लाइब्रेरी का उपयोग करना लगभग अनावश्यक है। गोना रिपोर्ट यूसुफ के ब्राउज़र गोद लेने को दिखाने के लिए सपने देखने का लिंक JSON.parse: caniuse.com/#search=json
Hulvej

10

JQuery के अनुसार

जहाँ ब्राउज़र JSON.parse का मूल कार्यान्वयन प्रदान करता है, jQuery स्ट्रिंग को पार्स करने के लिए इसका उपयोग करता है।

इस प्रकार इसका मतलब है कि यदि ब्राउज़र पर कोई मूल कार्यान्वयन मौजूद नहीं है, तो jQuery एक JSON पार्सर प्रदान करता है। यहाँ JSON की कार्यक्षमता वाले ब्राउज़रों का तुलनात्मक चार्ट है (और नहीं है)


6

JSON.parse () मूल रूप से कुछ ब्राउज़रों पर उपलब्ध है, दूसरों पर नहीं, इसलिए लाइब्रेरी का उपयोग करना सुरक्षित है। JQuery कार्यान्वयन अच्छी तरह से काम करता है, जैसा कि अन्य उत्तरदाताओं ने नोट किया है। वहाँ भी है डगलस Crockford के JSON पुस्तकालय , यदि उपलब्ध देशी कार्यान्वयन का उपयोग करता है।

JSON लाइब्रेरी का यह फायदा है कि इसमें जावास्क्रिप्ट ऑब्जेक्ट को JSON स्ट्रिंग में बदलने का एक तरीका है, जो इस समय jQuery से गायब है ..


सबसे अच्छा जवाब क्योंकि यह इंगित करता है कि डगलस क्रॉकफोर्ड द्वारा JSON लाइब्रेरी अभी भी क्यों आवश्यक है।
नाथन मोइनवाज़िरी

6

यदि आप jQuery संस्करण 3 (2016 में जारी) का उपयोग कर रहे हैं, तो आपको उपयोग करना चाहिए JSON.parse()क्योंकि jQuery.parseJSON() पदावनत कर दिया गया है

JQuery 3.0 के रूप में, $ .parseJSON पदावनत है। JSON ऑब्जेक्ट्स को पार्स करने के लिए, बजाय देशी JSON.parse विधि का उपयोग करें।


3

मुझे प्रदर्शन के बारे में पता नहीं है, लेकिन यह निश्चित रूप से jQuery पद्धति का उपयोग करने के लिए सुरक्षित है क्योंकि कुछ ब्राउज़र जैसे कि ie7 और निम्न में कोई JSON कार्यात्मकता नहीं हो सकती है।
यह सब अनुकूलता के बारे में है, ठीक उसी तरह जैसे कि आप jQuery के प्रत्येक विधि का उपयोग करें, जबकि forEachपुनरावृति के लिए सरणी की मूल विधि।


मैं हमेशा JSON.parse (दिनांक) का उपयोग करता हूं क्योंकि मैं IE8- का समर्थन कभी नहीं करता हूं और $ .parseJSON () ^ _ ^ IE8 के लिए इससे कम वर्णों का उपयोग करता हूं- आइए इस तरह का उपयोग करें <! - [अगर लेट IE 8]> <meth HTTP http! equiv = "Refresh" कंटेंट = "0; url = / error-browser.html"> <! [endif] ->
xicooc

2

प्रदर्शन के बारे में बात करते हुए , सबसे अद्यतन उत्तर है JSON.parse

देशी JSON ऑब्जेक्ट आजकल हर ब्राउज़र में समर्थित है, इसलिए इसका चयन करें । आप यहाँ समर्थन तालिका देख सकते हैं: http://caniuse.com/#feat=jsonJSON.parse

आप गीता पर JQuery के भंडार में इस उपनाम की खोज कर सकते हैं: https://github.com/jquery/jquery/search?utf8=%E2%9C%93&q=parsexSON

भी, jQuery.parseJsonथा यहाँ अन्य उत्तरों द्वारा उल्लिखित संस्करण 3.0+ पर पदावनत गया

यदि आप एक पुराने JQuery संस्करण + हैं, तो आपको केवल jQuery के संस्करण का उपयोग करना चाहिए यदि आप बहुत पुराने ब्राउज़रों के लिए समर्थन प्रदान करना चाहते हैं (सामान्य रूप से अनुशंसित नहीं )।


1

jQuery आंतरिक रूप से उपयोग करता है JSON.parse फ़ाइल को पार्स करने के लिए है। इसलिए यह ज्यादातर मामलों में कोई अंतर नहीं करता है।

लेकिन कुछ पुराने ब्राउज़र JSON.parseकार्यक्षमता का समर्थन नहीं करते हैंjQuery.parseJSON करना फायदेमंद है क्योंकि jQuery अपने कार्य का उपयोग करके JSON को संभाल सकता है।

ध्यान दें:

jQuery.parseJSONjQuery 3.0 से हटा दिया गया है JSON.parse। मूल विधि का उपयोग करें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.