मैंने पाया है कि JSON ऑब्जेक्ट में तत्वों का क्रम मूल क्रम नहीं है।
JSON सूचियों के तत्वों के बारे में क्या? क्या उनका क्रम बना हुआ है?
मैंने पाया है कि JSON ऑब्जेक्ट में तत्वों का क्रम मूल क्रम नहीं है।
JSON सूचियों के तत्वों के बारे में क्या? क्या उनका क्रम बना हुआ है?
जवाबों:
हां, JSON सरणियों में तत्वों का क्रम संरक्षित है। से आरएफसी 7159 -इस जावास्क्रिप्ट ऑब्जेक्ट नोटेशन (JSON) डाटा इंटरचेंज फ़ॉर्मेट (जोर मेरा):
एक वस्तु शून्य या अधिक नाम / मूल्य जोड़े का एक अनियंत्रित संग्रह है, जहां एक नाम एक स्ट्रिंग है और एक मूल्य एक स्ट्रिंग, संख्या, बूलियन, अशक्त, वस्तु या सरणी है।
एक सरणी शून्य या अधिक मानों का एक क्रमबद्ध क्रम है।
"ऑब्जेक्ट" और "एरे" शब्द जावास्क्रिप्ट के सम्मेलनों से आते हैं।
कुछ कार्यान्वयन JSON ऑब्जेक्ट्स के क्रम को भी संरक्षित करते हैं, लेकिन इसकी गारंटी नहीं है।
किसी सरणी में तत्वों का क्रम बना हुआ []
है। तत्वों का क्रम (नाम: मूल्य जोड़े) एक "ऑब्जेक्ट" ( {}
) में नहीं है, और यह सामान्य रूप से उनके लिए "जंबल्ड" है, यदि JSON फॉर्मेटर / पार्सर द्वारा स्वयं नहीं तो भाषा-विशिष्ट ऑब्जेक्ट्स (शब्दकोश,) द्वारा एनएसडॉर, हैशटेबल, आदि) जो आंतरिक प्रतिनिधित्व के रूप में उपयोग किए जाते हैं।
व्यावहारिक रूप से, यदि चाबियाँ टाइप NaN की थीं, तो ब्राउज़र ऑर्डर नहीं बदलेगा।
निम्न स्क्रिप्ट "एक", "दो", "तीन" का उत्पादन करेगी:
var foo={"3":"Three", "1":"One", "2":"Two"};
for(bar in foo) {
alert(foo[bar]);
}
जबकि निम्नलिखित स्क्रिप्ट "तीन", "एक", "दो" का उत्पादन करेगी:
var foo={"@3":"Three", "@1":"One", "@2":"Two"};
for(bar in foo) {
alert(foo[bar]);
}
कुछ जावास्क्रिप्ट इंजन प्रविष्टि क्रम में चाबियाँ रखते हैं। उदाहरण के लिए, V8 उन कुंजियों के क्रम में सभी कुंजियों को रखता है , जिन्हें बिना छोड़े हुए 32-बिट पूर्णांक के रूप में पार्स किया जा सकता है ।
इसका मतलब है कि यदि आप निम्नलिखित में से किसी एक को चलाते हैं:
var animals = {};
animals['dog'] = true;
animals['bear'] = true;
animals['monkey'] = true;
for (var animal in animals) {
if (animals.hasOwnProperty(animal)) {
$('<li>').text(animal).appendTo('#animals');
}
}
var animals = JSON.parse('{ "dog": true, "bear": true, "monkey": true }');
for (var animal in animals) {
$('<li>').text(animal).appendTo('#animals');
}
आपको Chrome पर कुत्ते , भालू और बंदर लगातार मिलेंगे , जो V8 का उपयोग करता है। Node.js भी V8 का उपयोग करता है। यह तब भी सही होगा जब आपके पास हजारों आइटम होंगे। YMMV अन्य जावास्क्रिप्ट इंजनों के साथ।
"क्या JSON सूची में तत्वों का क्रम बना हुआ है?" अच्छा सवाल नहीं है। आपको यह पूछने की आवश्यकता है "क्या एक JSON सूची में तत्वों का क्रम बनाए रखते हुए [...]?" जैसा कि फेलिक्स किंग ने बताया, JSON एक टेक्स्ट डेटा प्रारूप है। यह एक कारण के बिना उत्परिवर्तित नहीं करता है। (जावास्क्रिप्ट) ऑब्जेक्ट के साथ JSON स्ट्रिंग को भ्रमित न करें।
आप शायद संचालन के बारे में बात कर रहे हैं जैसे JSON.stringify(JSON.parse(...))
। अब इसका उत्तर है: यह कार्यान्वयन पर निर्भर करता है। JSON के 99% * पार्सर्स ऑब्जेक्ट्स के ऑर्डर को बनाए नहीं रखते हैं, और सरणियों के ऑर्डर को बनाए रखते हैं, लेकिन आप JSON का उपयोग किसी चीज़ को स्टोर करने के लिए भी कर सकते हैं
{
"son": "David",
"daughter": "Julia",
"son": "Tom",
"daughter": "Clara"
}
और एक पार्सर का उपयोग करें जो वस्तुओं के क्रम को बनाए रखता है।
* शायद और भी :)