मैं जानना चाहता हूं कि कौन सा तेज है: XML और JSON? कब कौन सा उपयोग करें?
मैं जानना चाहता हूं कि कौन सा तेज है: XML और JSON? कब कौन सा उपयोग करें?
जवाबों:
कब, कौन सा उपयोग करना है, इसका उत्तर देने से पहले एक छोटी सी पृष्ठभूमि:
संपादित करें: मुझे यह उल्लेख करना चाहिए कि यह तुलना वास्तव में जावास्क्रिप्ट के साथ एक ब्राउज़र में उपयोग करने के दृष्टिकोण से है। यह तरीका नहीं है कि या तो डेटा प्रारूप का उपयोग किया जाना है, और बहुत सारे अच्छे पार्सर हैं जो विवरण को बदल देंगे जो मैं कह रहा हूं कि यह काफी वैध नहीं है।
JSON दोनों अधिक कॉम्पैक्ट और (मेरे विचार में) अधिक पठनीय है - ट्रांसमिशन में यह "तेज" हो सकता है, क्योंकि कम डेटा स्थानांतरित किया जाता है।
पार्सिंग में, यह आपके पार्सर पर निर्भर करता है। एक पार्सर कोड को बदल देता है (यह JSON या XML हो) डेटा संरचना में (जैसे नक्शा) XML की सख्त प्रकृति से लाभ हो सकता है ( XML स्कीमास डेटा संरचना को अच्छी तरह से नापसंद करता है) - हालांकि JSON में एक आइटम का प्रकार (स्ट्रिंग /) संख्या / नेस्टेड JSON ऑब्जेक्ट) को वाक्यात्मक रूप से अनुमानित किया जा सकता है, जैसे:
myJSON = {"age" : 12,
"name" : "Danielle"}
पार्सर को यह समझने के लिए पर्याप्त बुद्धिमान होने की आवश्यकता नहीं है कि 12
एक संख्या का प्रतिनिधित्व करता है, (और Danielle
किसी अन्य की तरह एक स्ट्रिंग है)। तो जावास्क्रिप्ट में हम कर सकते हैं:
anObject = JSON.parse(myJSON);
anObject.age === 12 // True
anObject.name == "Danielle" // True
anObject.age === "12" // False
XML में हमें निम्नलिखित की तरह कुछ करना होगा:
<person>
<age>12</age>
<name>Danielle</name>
</person>
(एक तरफ के रूप में, यह उस बिंदु को दिखाता है कि एक्सएमएल अधिक क्रिया है; डेटा ट्रांसमिशन के लिए एक चिंता)। इस डेटा का उपयोग करने के लिए, हम इसे पार्सर के माध्यम से चलाएंगे, फिर हमें कुछ इस तरह कॉल करना होगा:
myObject = parseThatXMLPlease();
thePeople = myObject.getChildren("person");
thePerson = thePeople[0];
thePerson.getChildren("name")[0].value() == "Danielle" // True
thePerson.getChildren("age")[0].value() == "12" // True
वास्तव में, एक अच्छा पार्सर age
आपके लिए अच्छी तरह से टाइप कर सकता है (दूसरी तरफ, आप इसे अच्छी तरह से नहीं चाहते हो सकता है)। जब हम इस डेटा को एक्सेस करते हैं तो क्या हो रहा है - ऊपर JSON उदाहरण में एक विशेषता लुकअप करने के बजाय - हम कुंजी पर एक मैप लुकअप कर रहे हैं name
। XML को इस तरह बनाना अधिक सहज हो सकता है:
<person name="Danielle" age="12" />
लेकिन हमें अभी भी अपने डेटा तक पहुंचने के लिए मैप लुकअप करना होगा:
myObject = parseThatXMLPlease();
age = myObject.getChildren("person")[0].getAttr("age");
संपादित करें: मूल:
अधिकांश प्रोग्रामिंग भाषाओं में (किसी भी खिंचाव से नहीं) एक नक्शा लुकअप इस तरह की विशेषता लुकअप की तुलना में अधिक महंगा होगा (जैसे कि हम ऊपर आए जब हमने JSON को पार्स किया)।
यह भ्रामक है: याद रखें कि जावास्क्रिप्ट (और अन्य गतिशील भाषाओं) में मानचित्र लुकअप और फ़ील्ड लुकअप के बीच कोई अंतर नहीं है । वास्तव में, एक क्षेत्र देखने है सिर्फ एक नक्शा देखने।
यदि आप वास्तव में सार्थक तुलना करना चाहते हैं, तो सबसे अच्छा यह मानदंड है - उस बेंचमार्क को उस संदर्भ में करें जहां आप डेटा का उपयोग करने की योजना बनाते हैं।
जैसा कि मैं टाइप कर रहा हूं, फेलिक्स क्लिंग ने पहले से ही एक दूसरे का उपयोग करने के संदर्भ में उनकी तुलना करते हुए एक काफी रसीला जवाब दिया है, इसलिए मैं आगे नहीं बढ़ूंगा।
तेज़ JSON या XML का परिणाम नहीं है या इसका परिणाम यह है कि उन दोनों के बीच तुलना होगी। यदि कोई है, तो यह पार्सर्स या बैंडविड्थ की एक विशेषता है जिसके साथ आप डेटा प्रसारित करते हैं।
यहाँ JSON और XML के फायदे और नुकसान की सूची दी गई है:
समर्थक:
कोन:
सरल वाक्यविन्यास, केवल एक मुट्ठी भर विभिन्न डेटा प्रकार समर्थित हैं।
टिप्पणियों के लिए कोई समर्थन नहीं।
समर्थक:
कोन:
इसलिए अंत में आपको तय करना होगा कि आपको क्या चाहिए । जाहिर है कि दोनों प्रारूपों में उनके वैध उपयोग के मामले हैं। यदि आप ज्यादातर जावास्क्रिप्ट का उपयोग करने जा रहे हैं तो आपको JSON के साथ जाना चाहिए।
कृपया पेशेवरों और विपक्षों को जोड़ने के लिए स्वतंत्र महसूस करें। मैं एक्सएमएल विशेषज्ञ नहीं हूं;)
id
दस्तावेज़ के भीतर अद्वितीय होने के लिए मजबूर करके ऐसा करता है ।
प्रसंस्करण गति केवल प्रासंगिक मामला नहीं हो सकता है, हालांकि, यह सवाल है, यहाँ एक बेंचमार्क में कुछ नंबर हैं: JSON बनाम XML: वर्बोसिटी के बारे में कुछ कठिन संख्या । गति के लिए, इस सरल बेंचमार्क में, XML JSON पर 21% ओवरहेड प्रस्तुत करता है।
वर्बोसिटी के बारे में एक महत्वपूर्ण नोट, जो लेख कहता है, सबसे आम शिकायत है: यह व्यवहार में इतना प्रासंगिक नहीं है (न तो एक्सएमएल और न ही जेएसएन डेटा आमतौर पर मनुष्यों द्वारा संभाला जाता है, लेकिन मशीनों द्वारा), भले ही बात के लिए गति, इसे संपीड़ित करने के लिए कुछ उचित समय की आवश्यकता होती है।
इसके अलावा, इस बेंचमार्क में, डेटा की एक बड़ी मात्रा को संसाधित किया गया था, और एक विशिष्ट वेब एप्लिकेशन ऐसे आकारों के डेटा चंक्स को प्रसारित नहीं करेगा, जो कि 90 एमबी के रूप में बड़े हैं, और संपीड़न लाभकारी नहीं हो सकता है (छोटे पर्याप्त डेटा के लिए, एक संकुचित हिस्सा असम्पीडित chunk से बड़ा होगा), इसलिए लागू नहीं होगा।
फिर भी, यदि कोई संपीड़न शामिल नहीं है, तो JSON, जैसा कि स्पष्ट रूप से निडर है, ट्रांसमिशन चैनल पर कम वजन करेगा, खासकर अगर एक वेबसकेट कनेक्शन के माध्यम से प्रेषित किया जाता है, जहां क्लासिक HTTP ओवरहेड की अनुपस्थिति JSON के लाभ में अंतर कर सकती है, और भी बहुत कुछ महत्वपूर्ण।
संचरण के बाद, डेटा का उपभोग किया जाना है, और यह समग्र प्रसंस्करण समय में गिना जाता है। यदि बड़े या जटिल पर्याप्त डेटा को प्रेषित किया जाना है, तो एक सत्यापन XML XML पार्सर द्वारा स्वचालित रूप से जाँच किए गए स्कीमा की कमी, JSON डेटा पर अधिक जांच की आवश्यकता हो सकती है; इन चेक को जावास्क्रिप्ट में निष्पादित किया जाना चाहिए, जो विशेष रूप से तेज़ होने के लिए नहीं जाना जाता है, और इसलिए यह ऐसे मामलों में एक्सएमएल पर एक अतिरिक्त ओवरहेड पेश कर सकता है।
वैसे भी, केवल परीक्षण आपके विशेष उपयोग के मामले में जवाब प्रदान करेगा (यदि गति वास्तव में एकमात्र मामला है, और न ही मानक और न ही सुरक्षा और न ही अखंडता)।
अद्यतन 1: उल्लेख के लायक है, EXI है, बाइनरी एक्सएमएल प्रारूप है, जो कि Gzip का उपयोग करने की तुलना में कम लागत पर संपीड़न प्रदान करता है, और संकुचित XML को हटाने के लिए अन्यथा प्रसंस्करण को बचाने की आवश्यकता होती है। EXI XML के लिए है, BSON JSON के लिए क्या है। यहाँ एक त्वरित अवलोकन है, जो अंतरिक्ष और समय दोनों में दक्षता के संदर्भ में है: EXI: अंतिम बाइनरी मानक? ।
अद्यतन 2: एक बाइनरी एक्सएमएल प्रदर्शन रिपोर्ट भी मौजूद है, जिसे डब्ल्यू 3 सी द्वारा दक्षता और कम मेमोरी और सीपीयू पदचिह्न के रूप में संचालित किया जाता है, यह एक्सएमएल क्षेत्र के लिए भी एक मामला है: कुशल एक्सएमएल इंटरचेंज मूल्यांकन ।
इस संदर्भ में ध्यान दिया जाना चाहिए, क्योंकि HTTP ओवरहेड को एक मुद्दे के रूप में उठाया गया था: Iana ने EXI एन्कोडिंग (ऊपर उल्लिखित कुशल बाइनरी एक्सएमएल) को पंजीकृत किया है, HTTP प्रोटोकॉल के लिए एक कंटेंट कोडिंग के साथ ( संपीड़ित , अपस्फीति और गज़िप के साथ ) । इसका मतलब है कि ईएक्सआई एक विकल्प है जो संभवतः अन्य HTTP क्लाइंट के बीच ब्राउज़रों द्वारा समझा जा सकता है। देखें हाइपरटेक्स्ट ट्रांसफर प्रोटोकॉल पैरामीटर (iana.org) ।
मुझे यह लेख डिजिटल बाज़ार में बहुत दिलचस्प लगा। नॉर्म से उनके उद्धरण उद्धृत करते हुए:
JSON पेशेवरों के बारे में:
यदि आप चारों ओर से गुजरना चाहते हैं, परमाणु मूल्य या सूची या परमाणु मानों के हैश हैं, तो JSON के XML के कई फायदे हैं: यह इंटरनेट पर सीधे प्रयोग करने योग्य है, विभिन्न प्रकार के अनुप्रयोगों का समर्थन करता है, यह JSON को संसाधित करने के लिए प्रोग्राम लिखना आसान है इसकी कुछ वैकल्पिक विशेषताएं हैं, यह मानव-सुपाठ्य और यथोचित रूप से स्पष्ट है, इसका डिज़ाइन औपचारिक और संक्षिप्त है, JSON दस्तावेज़ बनाना आसान है, और यह यूनिकोड का उपयोग करता है। ...
XML पेशेवरों के बारे में:
XML असंरचित डेटा की पूर्ण समृद्धि के साथ उल्लेखनीय रूप से संबंधित है। मैं XML के भविष्य के बारे में बिल्कुल भी चिंतित नहीं हूं, भले ही इसकी मौत को वेब एपीआई डिजाइनरों के कैडर द्वारा उल्लासपूर्वक मनाया जाए।
और मैं एक टक का विरोध नहीं कर सकता "मैंने आपको ऐसा कहा था!" मेरी मेज पर टोकन दूर। मैं यह देखने के लिए उत्सुक हूं कि जब JSON लोग अमीर एपीआई को विकसित करने के लिए कहते हैं, तो वे क्या करते हैं। जब वे कम अच्छी तरह से कड़े हुए डेटा का आदान-प्रदान करना चाहते हैं, तो क्या वे इसे JSON में बदल देंगे? मुझे JSON के लिए एक स्कीमा भाषा का कभी-कभार उल्लेख मिलता है, क्या अन्य भाषाएं अनुसरण करेंगी? ...
मैं व्यक्तिगत रूप से नॉर्म से सहमत हूं। मुझे लगता है कि XML पर अधिकांश हमले वेब डेवलपर्स से विशिष्ट अनुप्रयोगों के लिए आते हैं, और वास्तव में एकीकरण डेवलपर्स से नहीं। लेकिन यह मेरी राय है! ;)
{ "foo": 42 }
वह वस्तु किस प्रकार की है? फिर, प्रकार की कमी को ठीक करने के लिए, इस तरह की चीजें दिखाई देती हैं { "__type": "Bar", "foo": 42 }
:। एक्सएमएल में कंट्रास्ट टाइप में एलिमेंट नेम को कंफर्म किया जा सकता है <Bar><foo>42</foo></Bar>
:। केवल लिस्प और जावास्क्रिप्ट जैसे लोग;)
एक्सएमएल (एक्सटेंसिबल मार्कअप लैंग्वेज) का उपयोग अक्सर एक्सएचआर किया जाता है क्योंकि यह एक मानक प्रसारण भाषा है, जिसे किसी भी प्रोग्रामिंग भाषा द्वारा उपयोग किया जा सकता है और सर्वर और क्लाइंट दोनों का समर्थन किया जाता है, इसलिए यह सबसे लचीला समाधान है। XML को अधिक भागों के लिए अलग किया जा सकता है ताकि एक निर्दिष्ट समूह अन्य भागों को प्रभावित किए बिना, कार्यक्रम के हिस्से को विकसित कर सके। XML प्रारूप को XML DTD या XML स्कीमा (XSL) द्वारा भी निर्धारित किया जा सकता है और इसका परीक्षण किया जा सकता है।
JSON एक डेटा-एक्सचेंज प्रारूप है जो जावास्क्रिप्ट अनुप्रयोगों के संभावित प्रारूप के रूप में अधिक लोकप्रिय हो रहा है। मूल रूप से यह एक वस्तु अंकन सरणी है। JSON में एक बहुत ही सरल वाक्यविन्यास है ताकि आसानी से सीखा जा सके। और जावास्क्रिप्ट भी eval
फ़ंक्शन के साथ JSON को पार्स करने का समर्थन करता है। दूसरी ओर, eval
फ़ंक्शन को नकारात्मक मिला है। उदाहरण के लिए, प्रोग्राम बहुत धीमी गति से JSON हो सकता है और सुरक्षा के कारण eval
बहुत जोखिम भरा हो सकता है। इसका मतलब यह नहीं है कि JSON अच्छा नहीं है, बस हमें अधिक सावधान रहना होगा।
मेरा सुझाव है कि आपको JSON का उपयोग लाइट डेटा-एक्सचेंज, गेम्स जैसे अनुप्रयोगों के लिए करना चाहिए। क्योंकि आपको डेटा-प्रोसेसिंग के बारे में वास्तव में ध्यान रखने की ज़रूरत नहीं है, यह बहुत सरल और तेज़ है।
एक्सएमएल बड़ी वेबसाइटों के लिए सबसे अच्छा है, उदाहरण के लिए शॉपिंग साइट्स या ऐसा कुछ। XML अधिक सुरक्षित और स्पष्ट हो सकती है। आप आसानी से सुधार का परीक्षण करने और इसे आसानी से भागों में अलग करने के लिए बुनियादी डेटा-संरचना और स्कीमा बना सकते हैं।
मेरा सुझाव है कि गति और सुरक्षा के कारण आप XML का उपयोग करते हैं, लेकिन हल्के सामान के लिए JSON।
JSON के बारे में महत्वपूर्ण बात यह है कि सुरक्षा कारणों से डेटा ट्रांसफर को एन्क्रिप्ट किया जाए। कोई शक नहीं कि JSON बहुत तेजी से तो XML है। मैंने देखा है कि XML 100ms लेती है जहाँ JSON ने केवल 60ms लिया है। JSON डेटा में हेरफेर करना आसान है।