2009-05-21 15 views
87

मैंने window.JSON ऑब्जेक्ट के माध्यम से सुरक्षित रूप से और कुशलतापूर्वक जेएसओएन पार्सिंग/क्रमबद्धीकरण के कुछ ब्राउज़रों का समर्थन करने वाले कुछ ब्राउज़रों के संदर्भ देखे हैं, लेकिन विवरण आने के लिए कठिन हैं। क्या कोई सही दिशा में इंगित कर सकता है? इस ऑब्जेक्ट का खुलासा करने के तरीके क्या हैं? यह किस ब्राउजर के तहत समर्थित है?ब्राउज़र-मूल JSON समर्थन (window.JSON)

+8

[JSON ऑब्जेक्ट] के लिए देशी समर्थन (http://ecma262-5.com/ELS5_Section_15 साथ ब्राउज़रों पर जानकारी के लिए देखें [मैं JSON पार्स उपयोग कर सकते हैं जब?] (Http://caniuse.com/json)। htm # Section_15.12)। – outis

उत्तर

104

सभी आधुनिक ब्राउज़रों देशी JSON एन्कोडिंग/डिकोडिंग (Internet Explorer 8+, फ़ायरफ़ॉक्स 3.1+, सफारी 4, और क्रोम 3+) समर्थन करते हैं। असल में, JSON.parse(str)str में JSON स्ट्रिंग पार्स जाएगा और एक ऑब्जेक्ट, और JSON.stringify(obj) वस्तु obj की JSON प्रतिनिधित्व वापस आ जाएगी।

MDN article पर अधिक जानकारी।

+0

मुझे पता है कि समर्थन व्यापक नहीं है, लेकिन इस विधि का उपयोग करना एक स्ट्रिंग में eval() से बहुत तेज़ और सुरक्षित होना चाहिए, इसलिए मैं इसका उपयोग करना चाहता हूं जहां यह उपलब्ध है। अन्य ब्राउज़रों से समर्थन पर कोई विचार? – levik

+0

मैंने यह नहीं कहा कि इसका उपयोग न करें, मैंने कहा कि इस पर भरोसा न करें। निश्चित रूप से यह देखने के लिए जांचें कि यह उपलब्ध है (इस बिंदु पर केवल आईई 8 और कुछ एफएक्स बीटा उपयोगकर्ता) और यदि ऐसा है तो इसका उपयोग करें, लेकिन मैं बस इतना कह रहा हूं कि आपको ब्राउज़र का समर्थन नहीं करना चाहिए। अभी तक, वे दोनों ही एकमात्र ब्राउज़र हैं जो इसका समर्थन करते हैं, और वेबकिट अभी इस पर काम कर रहा है, इसलिए शायद यह जल्द ही Google क्रोम और सफारी में होगा। –

+14

ओह, और एक तरफ नोट पर, कभी भी eval() JSON तार। इसके बजाय, उपलब्ध कई JSON पार्सिंग पुस्तकालयों में से एक का उपयोग करें। –

12

json2.js का उपयोग करने का लाभ यह है कि यह केवल एक पार्सर स्थापित हो जाएगा अगर ब्राउज़र पास पहले से कोई नहीं करता है। आप पुराने ब्राउज़र के साथ संगतता बनाए रख सकते हैं, लेकिन मूल JSON पार्सर (जो अधिक सुरक्षित और तेज़ है) का उपयोग करें, यदि यह उपलब्ध हो। मूल निवासी JSON साथ

ब्राउज़र:

  • IE8 +
  • फ़ायरफ़ॉक्स 3.1+
  • सफारी 4.0.3+
  • ओपेरा 10.5+

जी

10

[विस्तार musicfreak टिप्पणी]

आप jQuery का उपयोग कर रहे हैं, तो का उपयोग parseJSON

var obj = jQuery.parseJSON(data) 

आंतरिक यह जाँच करता है ब्राउज़र .JSON.parse का समर्थन करता है, और (यदि उपलब्ध हो) कॉल देशी window.JSON.parse है।

यदि नहीं, तो खुद को पार्स करता है।

29

jQuery-1.7.1.js - 555 लाइन ...

parseJSON: function(data) { 
    if (typeof data !== "string" || !data) { 
     return null; 
    } 

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

    // Attempt to parse using the native JSON parser first 
    if (window.JSON && window.JSON.parse) { 
     return window.JSON.parse(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); 
} 





rvalidchars = /^[\],:{}\s]*$/, 

rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, 

rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, 

rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, 
+4

अच्छा। JQuery का उपयोग करने के लिए अच्छा तर्क। – OneWorld

+9

jQuery के अंदर देखने के लिए एक तर्क की तरह = = – Olga

8

किसी के लाभ के जो इस सूत्र में चलाता है के लिए - एक अप-टू-डेट, ब्राउज़र की निश्चित सूची का समर्थन करने वाले के लिए JSON ऑब्जेक्ट look here.। एक संक्षिप्त सामान्य उत्तर - वर्ष 2013+ में वास्तव में महत्वपूर्ण सभी ब्राउज़रों।