YAML उपकरण · 5 मिनट पढ़ें
JSON से YAML: मशीन आउटपुट को फिर से पढ़ने योग्य बनाना
JSON तार पर उत्कृष्ट है और पुल अनुरोध में अप्रिय है। जब एक API प्रतिक्रिया, एक टेराफ़ॉर्म राज्य खंड या एक पैकेज मेनिफेस्ट को कुछ ऐसा बनना होता है जिसकी मानव समीक्षा पंक्ति दर पंक्ति करती है, तो JSON से YAML रूपांतरण सामान्य उत्तर होता है - और उस रूपांतरण उद्धरण और इंडेंट का विवरण यह कैसे तय करता है कि परिणाम छह महीने बाद भी पढ़ने योग्य रहेगा या नहीं।
अद्यतन
JSON को YAML में कनवर्ट ही क्यों करें
दोनों प्रारूपों में समान डेटा होता है, लेकिन वे विभिन्न पाठकों के लिए अनुकूलित होते हैं। JSON अक्षरों को ब्रेसिज़, अल्पविराम और उद्धरण चिह्नों पर खर्च करता है; YAML उन्हें संरचना पर खर्च करता है जिसे आंख इंडेंटेशन के रूप में अनुसरण कर सकती है। प्रोग्राम द्वारा उत्पन्न और उपभोग किए जाने वाले डेटा के लिए, JSON जीतता है। उस डेटा के लिए जिसे कोई व्यक्ति संपादित करता है - Helm मान, सीआई परिभाषाएँ, अन्सिबल इन्वेंटरी, Docker फ़ाइलें लिखें - YAML जीतता है, यही कारण है कि जब भी उत्पन्न डेटा को मानव स्वामी की आवश्यकता होती है तो यह दिशा सामने आती है।
टिप्पणियाँ एक ऐसी चीज़ है जो जीवित नहीं रह सकती
रूपांतरण पठनीयता को बहाल कर सकता है लेकिन यह इरादे को बहाल नहीं कर सकता: स्रोत JSON के पास आगे बढ़ाने के लिए कोई टिप्पणी नहीं थी। यदि आपका जेनरेट किया गया YAML लोगों द्वारा बनाए रखा जाएगा, तो एक संक्षिप्त हेडर टिप्पणी जोड़ें जिसमें यह बताया गया हो कि यह कहां से आया है और क्या इसे पुनर्जीवित करता है, ताकि कोई भी उस फ़ाइल को संपादित न करे जिसे अगले परिनियोजन पर अधिलेखित कर दिया जाएगा।
उद्धरण: जहां परिवर्तित YAML चुपचाप टूट जाता है
YAML कई नंगे शब्दों को स्ट्रिंग के बजाय मान के रूप में मानता है। एक कनवर्टर जो आक्रामक तरीके से उद्धरण छोड़ता है वह एक भी दृश्यमान वर्ण को बदले बिना प्रकार बदल सकता है:
country: NO # parses as boolean false in YAML 1.1
version: 1.10 # parses as the number 1.1
time: 22:30 # parses as a sexagesimal integer
name: "on" # quoted on purpose — must stay a string
अच्छा आउटपुट किसी भी स्ट्रिंग को उद्धृत करता है जिसे गलत पढ़ा जा सकता है - `yes`/`no`/`on`/`off`, संख्यात्मक दिखने वाले पहचानकर्ता, अग्रणी शून्य वाले मान, समय और दिनांक - सब कुछ उद्धृत करने के बजाय, जो विराम चिह्न की दीवार उत्पन्न करता है जिससे आप बचने की कोशिश कर रहे थे।
इंडेंटेशन और मल्टी-लाइन स्ट्रिंग्स
दो स्थान सुरक्षित डिफ़ॉल्ट है: Kubernetes दस्तावेज़ीकरण, Helm टेम्प्लेट और अधिकांश संपादक यही मानते हैं, और यह टूल के बीच कॉपी-पेस्ट से बचता है। चार-अंतरिक्ष शैली में गहरे घोंसलों को लगभग छह स्तरों से आगे स्कैन करना कठिन हो जाता है। लंबी स्ट्रिंग्स अन्य स्वरूपण निर्णय हैं - एम्बेडेड न्यूलाइन के साथ एक JSON मान एस्केप्ड वन-लाइनर के रूप में या YAML ब्लॉक स्केलर के रूप में सामने आ सकता है जो स्वाभाविक रूप से पढ़ता है। यदि फ़ील्ड एक शेल स्क्रिप्ट या कॉन्फ़िगरेशन स्निपेट है, तो ब्लॉक फॉर्म मांगें।
कुंजियाँ क्रमबद्ध करने से अंतर सार्थक हो जाता है
JSON ऑब्जेक्ट कुंजी क्रम महत्वपूर्ण नहीं है, इसलिए कन्वर्टर्स पुन: व्यवस्थित करने के लिए स्वतंत्र हैं। कुंजियों को वर्णानुक्रम में क्रमबद्ध करने से पुनर्जीवित फ़ाइलें स्पष्ट रूप से भिन्न हो जाती हैं: इसके बिना, एक परिवर्तित परिनियोजन क्रम संपूर्ण-फ़ाइल पुनर्लेखन के रूप में दिखाई देता है। यदि आप गिट में उत्पन्न YAML को ट्रैक कर रहे हैं, तो सॉर्टिंग एक-पंक्ति अंतर और दो-सौ-पंक्ति अंतर के बीच का अंतर है।
राउंड ट्रिप को एक ही स्थान पर रखें
चूँकि दोनों दिशाएँ व्युत्क्रम हैं, इसलिए दोनों को एक ही टूल में रखना उचित है ताकि आप संदर्भ को बदले बिना या अपने कॉन्फ़िगरेशन को तीन अलग-अलग सेवाओं में चिपकाए बिना परिवर्तित, संपादित और वापस परिवर्तित कर सकें। इस साइट पर ब्राउज़र-आधारित कनवर्टर YAML से JSON टूल के साथ जुड़ता है, ऑफ़लाइन काम करता है, और कभी भी पेलोड अपलोड नहीं करता है - जो तब मायने रखता है जब प्रश्न में JSON एक उत्पादन API प्रतिक्रिया हो।
JSON से YAML - अक्सर पूछे जाने वाले प्रश्न
क्या परिवर्तित YAML मेरा कुंजी ऑर्डर बनाए रखेगा?
कन्वर्टर्स कुंजियाँ सॉर्ट कर सकते हैं या प्रविष्टि क्रम को संरक्षित कर सकते हैं। गिट में ट्रैक की गई फ़ाइलों के लिए सॉर्टिंग आमतौर पर बेहतर विकल्प है क्योंकि पुन: उत्पन्न करने से स्थिर, न्यूनतम अंतर उत्पन्न होता है; जब आदेश ही पाठकों के लिए सार्थक हो तो मूल क्रम को सुरक्षित रखें।
JSON से YAML रूपांतरण के बाद मान का प्रकार क्यों बदल गया?
YAML में नंगे स्केलर की दोबारा व्याख्या की जाती है: `no`, `on` और `off` बूलियन बन सकते हैं, और `1.10` जैसे मान संख्याएँ बन सकते हैं। एक सुरक्षित कनवर्टर उन स्ट्रिंग्स को उद्धृत करता है जिन्हें अन्यथा गलत तरीके से पढ़ा जाएगा। यदि किसी फ़ील्ड को एक स्ट्रिंग रहना चाहिए, तो इसे YAML में स्पष्ट रूप से उद्धृत करें।
क्या मैं JSON को YAML ऑफ़लाइन में बदल सकता हूँ?
हां - रूपांतरण एक स्थानीय पार्स है और इसमें कोई सर्वर शामिल नहीं होने पर पुन: क्रमबद्ध होता है, इसलिए टूल डिस्कनेक्ट किए गए नेटवर्क के साथ काम करता रहता है और आपका डेटा ब्राउज़र टैब को कभी नहीं छोड़ता है।
इस पोस्ट में उल्लिखित उपकरण
पढ़ने के लिए और लेख
6 मिनट पढ़ें
YAML से JSON: अपना दिमाग खोए बिना कॉन्फ़िगरेशन परिवर्तित करना
बहु-दस्तावेज़ समर्थन और सटीक त्रुटि स्थानों के साथ ब्राउज़र में YAML को JSON में कनवर्ट करें - साथ ही YAML गलतियाँ जो सीआई पाइपलाइनों को चुपचाप तोड़ देती हैं।
6 मिनट पढ़ें
JSON फ़ॉर्मेटर: सुंदर, छोटा, और वास्तव में मान्य
एक JSON फ़ॉर्मेटर जो सटीक त्रुटि स्थानों के साथ सुंदर-प्रिंट, छोटा और मान्य करता है - साथ ही लगभग हर अमान्य JSON त्रुटि के पीछे पाँच सिंटैक्स गलतियाँ।
- पढ़ने के लिए लंबा लेख: YAML बनाम JSON: कब उपयोग करें कौन सा (और कैसे परिवर्तित करें)