2012-04-28 17 views
76

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

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

+1

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

उत्तर

108

यहाँ एक उद्धरण from 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); 
}, 

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

तो हाँ, आप निश्चित रूप से jQuery.parseJSON उपयोग करना चाहिए।

+3

वाह, महान उत्तर! सभी को धन्यवाद, मुझे लगता है कि आपका सबसे व्यापक उत्तर है। –

+0

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

+0

rvalidchars.test सामान को अवैध JSON पकड़ना चाहिए; तो यह बहुत सुरक्षित दिखता है। – Daniel

10

According to jQuery

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

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

+0

तो मैंने jQuery को जानने के बिना सही अनुमान लगाया;)। –

+0

सूचनात्मक चार्ट के लिए धन्यवाद :) –

3

मैं प्रदर्शन के बारे में पता नहीं है, लेकिन यह निश्चित रूप से jQuery विधि का उपयोग करने क्योंकि IE7 जैसे कुछ ब्राउज़रों और कम किसी भी JSON कार्यक्षमताओं देशी रूप नहीं हो सकता सुरक्षित है की here's a comparison chart
यह सब संगतता के बारे में है, जैसा कि आप jQuery के प्रत्येक विधि का प्रयोग यात्रा के लिए सरणी के देशी forEach विधि की।

+0

आईई 8 जेएसओएन का समर्थन करता है। – RiZKiT

+0

आप सही हैं। धन्यवाद। जवाब अद्यतन –

+0

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

6

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

JSON पुस्तकालय लाभ यह एक तरीका है JSON स्ट्रिंग, जो इस समय jQuery से लापता है में JavaScript ऑब्जेक्ट का चालू करने के लिए है कि ..

+0

सर्वश्रेष्ठ उत्तर क्योंकि यह इंगित करता है कि डगलस क्रॉकफोर्ड द्वारा जेएसओएन लाइब्रेरी अभी भी जरूरी क्यों है। –

2

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

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

तुम भी GitHub पर JQuery के भंडार में इस उर्फ ​​दिखावे के लिए खोज कर सकते हैं:: https://github.com/jquery/jquery/search?utf8=%E2%9C%93&q=parseJSON

इसके अलावा, jQuery.parseJson था पदावनत संस्करण पर 3.0+ के रूप में यहां अन्य उत्तर ने उल्लेख आप यहाँ समर्थन तालिका देख सकते हैं।

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

4

यदि आप jQuery 3.0+ का उपयोग कर रहे हैं तो आपको JSON.parse का उपयोग करना चाहिए क्योंकि jQuery.parseJSON को बहिष्कृत कर दिया गया है।

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

1

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

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

नोट:

jQuery.parseJSON jQuery 3.0.So से हटा दिया गया है देशी JSON.parse विधि का इस्तेमाल करें।

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