क्या कोई सरणी शीर्ष स्तर का JSON-टेक्स्ट हो सकता है?


जवाबों:


126

हां, शीर्ष-स्तर JSON-टेक्स्ट के रूप में एक सरणी कानूनी है।

JSON को परिभाषित करने वाले तीन मानक दस्तावेज हैं: RFC 4627 , RFC 7159 (जो RFC 4627 का पालन करता है), और ECMA-404 । वे भिन्न होते हैं जिसमें शीर्ष-स्तरीय तत्व वे अनुमति देते हैं, लेकिन सभी शीर्ष-स्तरीय तत्व के रूप में एक वस्तु या एक सरणी की अनुमति देते हैं।

  • RFC 4627: ऑब्जेक्ट या सरणी।
    "JSON पाठ एक क्रमबद्ध ऑब्जेक्ट या सरणी है।"
  • RFC 7159: कोई JSON मान।
    "JSON पाठ एक क्रमबद्ध मूल्य है।"
  • ECMA-404: कोई भी JSON मान।
    "एक JSON पाठ यूनिकोड कोड बिंदुओं से गठित टोकन का एक अनुक्रम है जो JSON मूल्य व्याकरण के अनुरूप है।"

2
इस नए RFC के रूप में , "एक JSON पाठ टोकन का एक क्रम है। टोकन के सेट में छह संरचनात्मक वर्ण, तार, संख्या और तीन शाब्दिक नाम शामिल हैं।"
मारक

63

हां , लेकिन आपको कुछ परिदृश्यों में JSON अपहरण के कारण रूट को ऑब्जेक्ट बनाने पर विचार करना चाहिए । यह जावास्क्रिप्ट में सरणी कंस्ट्रक्टर को ओवरराइड करने के आधार पर एक सूचना प्रकटीकरण भेद्यता है।


11
हां, यह एक शानदार जवाब की पहचान है - न केवल ओपी को बता रहा है कि वे क्या जानना चाहते थे, बल्कि यह भी कि उन्हें क्या पता होना चाहिए (लेकिन उन्हें एहसास नहीं हुआ)। वास्तव में, JSON से जुड़ी कमजोरियों का एक समूह है जो जावास्क्रिप्ट के रूप में पार्स करता है, JSON अपहरण केवल एक उदाहरण है।
13


4

यह ECMAScript विनिर्देशन से है।

JSONText:
    JSONValue

JSONValue:
    JSONNullLiteral 
    JSONBooleanLiteral 
    JSONObject 
    JSONArray 
    JSONString 
    JSONNumber

1
यह थोड़ा भ्रामक है, हालांकि, क्योंकि ECMAScript आपको JSON स्ट्रिंग्स को पार्स करने की अनुमति देता है जो शीर्ष-स्तरीय ग्रंथ नहीं हैं। RFC के अनुसार, "एक JSON टेक्स्ट एक सीरीज़्ड ऑब्जेक्ट या एरे है।"
मैथ्यू फ्लेशेन

@ मैथ्यू - अजीब, मुझे आश्चर्य है कि क्रॉकफोर्ड इसके बारे में कैसा महसूस करते हैं। वे RFC और ECMA के बीच मतभेदों को कैसे सुलझाएंगे?
चोसपंडियन

3
मैंने अभी देखा, और पाया कि वे अंतर से अवगत हैं। ECMAScript 5 .1215.12 से, "ECMAScript JSON व्याकरण के शीर्ष स्तर के JSONText उत्पादन में JSONObject या JSONOrray को RFC 4627 द्वारा निर्दिष्ट किए जाने के बजाय प्रतिबंधित किया जा सकता है।" मुझे नहीं पता कि IETF RFC को बदलेगा या नहीं।
मैथ्यू फ्लैशेन

@ मैथ्यू - इसके लिए धन्यवाद, मैं बुरी तरह से भ्रमित हो रहा था। Json.org विवरण "json-पाठ" का अधिक प्रतिबंधात्मक अवधारणा का उल्लेख नहीं है सब पर है, और इसके महत्व के बारे में अस्पष्ट की आरएफसी तरह।
mrec

यह उत्तर ECMAScript के बारे में है, लेकिन सवाल JSON के बारे में है। जबकि वे (जानबूझकर) समान दिखते हैं, वे अलग - अलग चश्मा हैं
sleske

2

हाँ, इसे यहाँ आज़माएँ।

http://www.jsonlint.com/

और [{}] में डाल दिया


3
यह उससे भी आसान है। में डालें []और यह मान्य होगा।
बोरिपाल सेप

लिंक मृत है, कृपया अपडेट करें, या निकालें, यह लगभग लिंक-केवल-उत्तर है।
एंथन

1

कुछ भ्रम है, अन्य टिप्पणियों में देखा गया है। "एप्लिकेशन / json" मीडिया प्रकार केवल JSON- RFC प्रति JSON -text के लिए शीर्ष-स्तर पर केवल ऑब्जेक्ट या सरणी की अनुमति देता है । हालांकि, पार्सर के लिए कोई भी JSON मान स्वीकार्य है, जैसा कि ECMAScript विनिर्देश में देखा गया है।


शीर्ष स्तर के तत्व के रूप में कोई भी JSON मान एक ECMAScript पार्सर के लिए स्वीकार्य है , लेकिन एक (आज्ञाकारी) JSON पार्सर के लिए - महत्वपूर्ण अंतर नहीं है।
sleske

यह एक दिलचस्प अंतर है, लेकिन मुझे समझ नहीं आता कि आप क्या कह रहे हैं। "(आज्ञाकारी) JSON पार्सर" की परिभाषा क्या है?
cdunn2001

1
खैर, एक JSON पार्सर JSON व्याकरण के लिए एक पार्सर है। जबकि JSON जावास्क्रिप्ट के समान दिखता है, यह एक अलग (बहुत सरल) व्याकरण है। Tools.ietf.org/html/rfc7159 देखें , जिसमें JSON व्याकरण का वर्णन है। "आज्ञाकारी" का अर्थ है कि पार्सर वास्तव में व्याकरण का अनुसरण करता है (जो किसी भी सभ्य पार्सर को चाहिए)।
sleske

3
RFC 4627 पुराना है, कृपया अब इसका अनुसरण न करें। नए आरएफसी शीर्ष स्तर पर भी सरल मूल्यों की अनुमति देते हैं।
मथायस डाइटर वॉलनफर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.