ब्राउज़र-देशी JSON समर्थन (window.JSON)


92

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


8
देखें कि मैं JSON पार्सिंग का उपयोग कब कर सकता हूं? JSON ऑब्जेक्ट के लिए मूल समर्थन वाले ब्राउज़रों की जानकारी के लिए ।
outis

जवाबों:


108

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

एमडीएन लेख पर अधिक जानकारी ।


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

17
ओह, और एक तरफ ध्यान दें, कभी नहीं () JSON तार। इसके बजाय, उपलब्ध कई JSON पार्सिंग पुस्तकालयों में से एक का उपयोग करें।
साशा चोडगोव

1
@colbeerhey: हाँ, यह वह है जिसे मैं सबसे अधिक बार देखता हूं। आप jQuery की चोरी भी कर सकते हैं।
साशा चेदिगोव

2
संदर्भ के लिए, जब आप कहते हैं "NEVER eval () ..." और फिर उल्लेख करें कि json2 लोकप्रिय रूप से समर्थित लाइब्रेरी है, यह ध्यान देने योग्य है कि यह eval का उपयोग नहीं करता है, लेकिन यह पहले रेगेक्स का उपयोग करके स्ट्रिंग को मान्य करने का प्रयास करता है। यह स्ट्रिंग को मान्य और पार्स करने की तुलना में तेज़ है, हालांकि ऐसे पार्सर हैं जो तुलनीय प्रदर्शन के साथ मान्य नहीं हैं। json2.js अभी भी शायद सबसे अच्छा विकल्प है, अगर केवल इसकी व्यापकता के लिए।
एक्सेंकोसाइड

2
@ TheXenocide: अच्छी बात है, लेकिन इसके लेखक ने शायद उस सत्यापन कोड पर समय का एक अच्छा हिस्सा बिताया है, इसलिए मैं कहता हूं कि eval()JSON तार कभी नहीं होगा क्योंकि आप पहिया को फिर से मजबूत करेंगे और आपको संभवतः यह गलत मिलेगा।
साशा चेडगोव 20

30

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 का उपयोग करने के लिए अच्छा तर्क।
वनवर्ल्ड

11
JQuery =) के अंदर देखने के लिए एक तर्क की तरह अधिक
ओल्गा

13

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

मूल निवासी के साथ ब्राउज़र:

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

जी


10

[फैली म्यूजिकफ्रीक टिप्पणी]

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

var obj = jQuery.parseJSON(data)

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

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


8

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

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