2010-10-20 20 views
89

मैं JSON और जावास्क्रिप्ट ऑब्जेक्ट्स में नया हूं।JSON और जावास्क्रिप्ट ऑब्जेक्ट के बीच अंतर क्या हैं?

  • क्या कोई JSON और जावास्क्रिप्ट ऑब्जेक्ट के बीच अंतरों को समझा सकता है?
  • उनके उपयोग क्या हैं?
  • क्या एक दूसरे से बेहतर है? या यह स्थिति पर निर्भर करता है?
  • किस स्थिति में, किस स्थिति में उपयोग करना है?
  • जेएसओएन पहली जगह क्यों बनाया गया था? इसका मुख्य उद्देश्य क्या था?
  • क्या कोई जावास्क्रिप्ट ऑब्जेक्ट के बजाए JSON का उपयोग करने के लिए उदाहरण दे सकता है और इसके विपरीत?
+0

एक समय में एक प्रश्न, कृपया। –

+0

संभावित डुप्लिकेट [जेएसओएन और ऑब्जेक्ट लिटल नोटेशन के बीच क्या अंतर है?] (Http://stackoverflow.com/questions/2904131/what-is-the-difference-between-json-and-object-literal-notation) – Teepeemm

उत्तर

131

सबसे पहले आपको पता होना चाहिए क्या JSON है:

  • यह भाषा नास्तिक डेटा विनिमय प्रारूप है।

जेएसओएन का सिंटैक्स जावास्क्रिप्ट ऑब्जेक्ट लिटल नोटेशन से प्रेरित था, लेकिन उनके बीच अंतर हैं।

उदाहरण के लिए, JSON में सभी कुंजी, उद्धृत किया जाना चाहिए, जबकि वस्तु शाब्दिक में यह आवश्यक नहीं है:

// JSON: 
{ "foo": "bar" } 

// Object literal: 
var o = { foo: "bar" }; 

उद्धरण JSON पर अनिवार्य हैं क्योंकि जावास्क्रिप्ट (ECMAScript 3 में वास्तव में अधिक में संस्करण।), संपत्ति के नाम के रूप आरक्षित शब्द के उपयोग उदाहरण के लिए स्वीकृत नहीं है तो:

var o = { if: "foo" }; // SyntaxError in ES3 

है, एक स्ट्रिंग एक संपत्ति नाम के रूप में शाब्दिक (समर्थक के हवाले से उपयोग करते हुए perty नाम) कोई समस्या नहीं देता है:

var o = { "if": "foo" }; 

तो "संगतता" (और आसान हो सकता है eval'ing) उद्धरण अनिवार्य हैं के लिए?।

JSON में डेटा प्रकार भी निम्न मान तक ही सीमित हैं:

  • string
  • number
  • object
  • array
  • एक शाब्दिक रूप में:
    • true
    • false
    • null

Strings परिवर्तन की व्याकरण। कोडबल कोट्स द्वारा सीमित किया गया है, जबकि जावास्क्रिप्ट में, आप एकल या दोहरे उद्धरणों को एक दूसरे के साथ उपयोग कर सकते हैं।

// Invalid JSON: 
{ "foo": 'bar' } 

Numbers के स्वीकार किए जाते हैं JSON व्याकरण भी बदल जाता है, जावास्क्रिप्ट में आप हेक्साडेसिमल Literals उपयोग कर सकते हैं, उदाहरण के 0xFF के लिए, या (कुख्यात) ऑक्टल Literals उदा 010। JSON में आप केवल दशमलव दशमलव का उपयोग कर सकते हैं।

// Invalid JSON: 
{ "foo": 0xFF } 

कुछ गाड़ी कार्यान्वयन (Firefox 3.5+, IE8 +, json2.js) जहां अष्टाधारी शाब्दिक को गलत तरीके से अनुमति दी जाती है, उदाहरण के लिए कर रहे हैं JSON.parse('01') को SyntaxError का उत्पादन करना चाहिए।

+34

+1 अच्छा उत्तर लेकिन सबसेटिंग पर जोर देने के साथ कर सकता है: कोई वैध JSON घोषणा भी एक वैध जावास्क्रिप्ट घोषणा है, लेकिन सभी वैध जावास्क्रिप्ट घोषणाएं JSON घोषणाएं नहीं हैं। –

+1

एक जावास्क्रिप्ट फ़ाइल में जेएसओएन को कभी भी देखे जाने का एकमात्र तरीका प्रदर्शित करने में मददगार होगा; यानी एक स्ट्रिंग के अंदर। –

+0

@ सीएमएस इसे पूरी तरह से ऊपर वर्णित करता है, लेकिन मैं कहूंगा कि आप जेएसओएन वास्तव में किस चीज के लिए खड़े हैं, इस अंतर को काफी बता सकते हैं ... यह जावास्क्रिप्ट इंजेक्शन "नोटेशन" है! – Alex

21

JSON किसी ऑब्जेक्ट का स्ट्रिंग प्रस्तुति है। यह एक इंटरऑपरेबल धारावाहिक प्रारूप है। यह केवल जावास्क्रिप्ट से बंधे नहीं है। उदाहरण के लिए .NET के लिए JSON serializers हैं जो आपको .NET ऑब्जेक्ट्स को क्रमबद्ध/deserialize करने की अनुमति देता है।

तो यह केवल एक प्रारूप है जो आपको ऑब्जेक्ट्स से स्ट्रिंग और बैक में कनवर्ट करने की इजाजत देता है, जो सुविधाजनक है यदि आप उन्हें तार पर स्थानांतरित करना चाहते हैं।

यह जावास्क्रिप्ट ऑब्जेक्ट प्रस्तुति के बहुत करीब है और यदि आप बस eval() एक JSON स्ट्रिंग आपको संबंधित ऑब्जेक्ट प्राप्त करेंगे।

+3

क्रॉकफ़ोर्ड आपको यह नहीं कहने दें कि ... – nickf

+4

@nickf, क्रॉकफ़ोर्ड की json2.js लाइब्रेरी बस कुछ "regex सत्यापन" के बाद 'eval' करता है, यह * पार्सिंग *: पी के कुछ भी नहीं करता है। असल में, यहां तक ​​कि उनकी * लाइब्रेरी * में [अपने स्वयं के आरएफसी] से कुछ विचलन हैं (http://www.ietf.org/rfc/rfc4627.txt?number=4627) !, उदाहरण के लिए, json2.js गलत तरीके से " पार्स "ऑक्टल अक्षर, उदाहरण: 'JSON.parse (" 01 ")' ... मुझे यह मजाकिया लगता है: पी – CMS

+0

@ सीएमएस मुझे लगता है कि डौग वाक्यांश" ऑब्जेक्ट 'eval() '" पर ऑब्जेक्ट करेगा ... (रेगेक्स सत्यापन और इतने पर) – nickf

1

JSON एक डेटा इंटरचेंज प्रारूप है, जो केवल वाईएएमएल या जावास्क्रिप्ट कोड के उप-समूह की तरह दिखता है जिसे आप निष्पादित कर सकते हैं और ऑब्जेक्ट वापस ले सकते हैं। एक जावास्क्रिप्ट ऑब्जेक्ट जावास्क्रिप्ट में सिर्फ एक वस्तु है।

जेएसओएन डेटा इंटरचेंज प्रारूप होने के साथ आप संरचित डेटा को इसके साथ एक पाठ रूप में बदल सकते हैं। यह अब तक जावास्क्रिप्ट से काफी decoupled है। जावास्क्रिप्ट ऑब्जेक्ट आपको जावास्क्रिप्ट प्रोग्राम के निष्पादन के दौरान संरचित डेटा के साथ बनाने और काम करने की अनुमति देता है।

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