मार्गदर्शक लेख · 6 मिनट पढ़ा
YAML बनाम JSON: कब कौन सा उपयोग करना है
YAML बनाम JSON एक ही मूल विचार पर निर्मित दो क्रमांकन प्रारूपों के बीच एक विकल्प है: नेस्ट कुंजी-मूल्य जोड़े और सूचियाँ। व्यवहार में अंतर इस बात को लेकर है कि फ़ाइल को कौन पढ़ता है: मनुष्य या मशीन।
अद्यतन
YAML बनाम JSON: लघु संस्करण
JSON एक डेटा इंटरचेंज प्रारूप है: सख्त, स्पष्ट, और हर भाषा इसे मूल रूप से पार्स कर सकती है। YAML एक कॉन्फ़िगरेशन प्रारूप है: यह टिप्पणियों और मल्टी-लाइन स्ट्रिंग्स को स्वीकार करता है, और इसे पुल अनुरोधों में लोगों द्वारा संपादित करने के लिए डिज़ाइन किया गया है। तार पर JSON का उपयोग करें, उन फ़ाइलों में YAML का उपयोग करें जिन्हें मनुष्य बनाए रखते हैं - और जब सीमा को इसकी आवश्यकता होती है तो उनके बीच परिवर्तित करें।
वास्तव में क्या भिन्न है
टिप्पणियाँ
YAML टिप्पणियाँ हैं; JSON नहीं है. कॉन्फ़िगरेशन फ़ाइलों में यह निर्णायक है - आपको पता है कि टाइमआउट को 3000 पर क्यों सेट किया गया है, इसका कारण आमतौर पर इसके ऊपर की टिप्पणी है। जब आप YAML को JSON में परिवर्तित करते हैं तो टिप्पणियाँ हटा दी जाती हैं, यही कारण है कि JSON को अक्सर एक निर्मित कलाकृति के रूप में माना जाता है, सत्य के स्रोत के रूप में नहीं।
सिंटेक्स और शोर
# YAML
service:
name: checkout
replicas: 3
ports: [8080, 9090]
// JSON — same data
{
"service": {
"name": "checkout",
"replicas": 3,
"ports": [8080, 9090]
}
}
YAML इंडेंटेशन संवेदनशीलता के बदले में ब्रेसिज़, उद्धरण चिह्न और अल्पविराम हटा देता है। यह वह व्यापार है जिसे हर YAML उपयोगकर्ता जानता है: कम अक्षर, रिक्त स्थान को सूक्ष्मता से गलत तरीके से प्राप्त करने के अधिक तरीके।
प्रकार और जाल
- JSON का एक संख्यात्मक प्रकार है; YAML इनट्स, फ़्लोट्स और बहुत कुछ को अलग करता है - और YAML 1.1 प्रसिद्ध रूप से देश कोड NO को बूलियन फ़ॉल्स के रूप में पार्स करता है, और 1.10 एक संख्या के रूप में जो उद्धृत किए जाने तक अपना पिछला शून्य खो देता है।
- YAML पुन: उपयोग के लिए एंकर और उपनाम (&डिफ़ॉल्ट / *डिफ़ॉल्ट) का समर्थन करता है; JSON का कोई समकक्ष नहीं है, इसलिए साझा ब्लॉकों को डुप्लिकेट या जेनरेट किया जाना चाहिए।
- YAML बहु-दस्तावेज़ फ़ाइलों (--- विभाजक) का समर्थन करता है; JSON प्रति फ़ाइल एक दस्तावेज़ है। कन्वर्टर्स आम तौर पर दस्तावेज़ों को एक सरणी में बदल देते हैं।
- JSON को दोहरे उद्धरण वाली कुंजियों और स्ट्रिंग की आवश्यकता होती है; YAML केवल आवश्यक होने पर ही उद्धरण देता है, जिसका अर्थ है कि एक लापरवाह स्ट्रिंग चुपचाप एक संख्या या बूलियन बन सकती है।
जहां हर फॉर्मेट जीतता है
- एपीआई और वायर प्रारूप: JSON. सार्वभौमिक पार्सर, पूर्वानुमेय अस्पष्टता, स्ट्रीमिंग-अनुकूल (JSON पंक्तियाँ)।
- Kubernetes, सीआई/सीडी, Docker कंपोज़, अन्सिबल, Helm: YAML, क्योंकि ये पारिस्थितिकी तंत्र इस पर मानकीकृत हैं और टिप्पणियों का समर्थन करते हैं।
- विक्रेता कॉन्फ़िगरेशन आप प्रोग्रामेटिक रूप से उत्पन्न करते हैं: JSON - एल्गोरिदम इसे इंडेंटेशन चिंता के बिना उत्पन्न करता है।
- दस्तावेज़ों को एक जूनियर टीम का साथी हाथ से संपादित करेगा: YAML, टिप्पणियों के साथ इसका कारण समझाते हुए।
सुरक्षित रूप से परिवर्तित करना
- अपनी बहु-दस्तावेज़ फ़ाइलों को जानें। --- से अलग किया गया एक k8s मेनिफेस्ट सेट एक JSON सरणी बनना चाहिए, न कि केवल पहला दस्तावेज़। एक कनवर्टर का उपयोग करें जो रिपोर्ट करता है कि उसे कितने दस्तावेज़ मिले।
- उन संख्याओं को उद्धृत करें जो पहचानकर्ता हैं। "1.10" एक संस्करण है; 1.10 एक फ्लोट है. यदि मान स्ट्रिंग हैं जो संख्यात्मक दिखते हैं तो YAML में कनवर्ट करते समय बल-उद्धरण सक्षम करें।
- टिप्पणियों को गायब होते हुए देखें. परिभाषा के अनुसार JSON में कनवर्ट करना हानिपूर्ण है; यदि टिप्पणियाँ मायने रखती हैं, तो YAML को स्रोत के रूप में रखें और JSON केवल निर्माण समय पर उत्पन्न करें।
- सटीक त्रुटियों के साथ मान्य करें. इंडेंटेशन त्रुटियाँ कुछ टूल में भ्रामक संदेश उत्पन्न करती हैं; सुनिश्चित करें कि आपका लाइन और कॉलम दिखाता है।
इसे आज़माएँ: किसी भी YAML को YAML से JSON कनवर्टर में चिपकाएँ - बहु-दस्तावेज़ समर्थन और सटीक त्रुटि रेखाएँ अंतर्निहित हैं, और कुछ भी अपलोड नहीं किया गया है।
सामान्य प्रश्न
क्या YAML JSON का सुपरसेट है?
YAML 1.2 को एक सुपरसेट के रूप में डिज़ाइन किया गया है - वैध JSON आमतौर पर मान्य YAML होता है। लेकिन YAML 1.1 (अभी भी वहाँ है) कुछ किनारे के मामलों में भिन्न है, और टैब, डुप्लिकेट कुंजियाँ और कुछ स्ट्रिंग इंजनों में अलग-अलग पार्स करते हैं। "यह तकनीकी रूप से मान्य है YAML" को एक मज़ेदार तथ्य के रूप में मानें, न कि प्रवासन रणनीति के रूप में।
कौन सा पार्स करना तेज़ है?
JSON पार्सर आम तौर पर तेज़ और सरल होते हैं क्योंकि व्याकरण छोटा होता है; प्रत्येक रनटाइम में मूल JSON पार्सिंग मौजूद होती है। कॉन्फ़िगरेशन फ़ाइलों के लिए अंतर अप्रासंगिक है - आप स्टार्टअप पर एक बार पार्स करते हैं।