YamlBox

YAML उपकरण · 6 मिनट पढ़ें

YAML से JSON: अपना दिमाग खोए बिना कॉन्फ़िगरेशन परिवर्तित करना

YAML को JSON में कनवर्ट करना दो सेकंड का काम है जब तक कि ऐसा न हो जाए: एक आवारा टैब, एक डुप्लिकेट कुंजी, या `---` मार्कर के पीछे छिपा हुआ दूसरा दस्तावेज़ एक साफ़ रूपांतरण को एक साइलेंट डेटा-लॉस बग में बदल देता है। यह मार्गदर्शिका बताती है कि एक अच्छा YAML से JSON रूपांतरण आपके लिए क्या करना चाहिए, और कहीं भी आउटपुट शिप करने से पहले जांचने योग्य विशिष्ट विफलता मोड।

अद्यतन

YAML से JSON रूपांतरण वास्तव में क्या करता है

YAML और JSON समान आकृतियों का वर्णन करते हैं - मानचित्र, सूचियाँ, तार, संख्याएँ, बूलियन और शून्य - इसलिए रूपांतरण ज्यादातर एक वाक्यविन्यास को दूसरे के रूप में पुन: क्रमबद्ध करने का मामला है। सतह में क्या परिवर्तन होता है: इंडेंटेशन ब्रेसिज़ बन जाता है, टिप्पणियाँ गायब हो जाती हैं, एंकर प्रतियां बन जाती हैं, और मल्टी-लाइन स्ट्रिंग्स `\n` एस्केप में ढह जाती हैं। उन परिवर्तनों में से हर एक एक तरह से हानिपूर्ण है जो मायने रखता है, यही कारण है कि रूपांतरण कदम को बाद में प्रारूपण के रूप में मानने के बजाय जानबूझकर किया जाना चाहिए।

परिवर्तित करने का व्यावहारिक कारण यह है कि JSON वही है जो अगला टूल चाहता है। Kubernetes YAML स्वीकार करता है, लेकिन `kubectl`, जेक्यू पाइपलाइन, API कॉल ​​और जावास्क्रिप्ट सभी JSON अधिक आराम से बोलते हैं। एक बार सही ढंग से कनवर्ट करना, समानांतर रूप से दो प्रारूपों को हाथ से संपादित करने से बेहतर है।

बहु-दस्तावेज़ YAML: मूक प्रथम-दस्तावेज़ समस्या

एक YAML फ़ाइल `---` से अलग किए गए कई दस्तावेज़ रख सकती है। अधिकांश कन्वर्टर्स चुपचाप पहले को वापस कर देते हैं और बाकी को फेंक देते हैं - इसलिए एक परिनियोजन, एक सेवा और एक कॉन्फिग मैप के साथ एक प्रकट बंडल बिना किसी चेतावनी के एक ऑब्जेक्ट बन जाता है। एक सही रूपांतरण या तो दस्तावेजों की एक श्रृंखला उत्सर्जित करता है या आपसे स्पष्ट रूप से पूछता है कि आपको कौन सा चाहिए। यदि कोई कनवर्टर ऐसा कोई नियंत्रण प्रदान नहीं करता है, तो वह डेटा खो रहा है।

त्रुटियाँ एक पंक्ति और स्तंभ पर इंगित होनी चाहिए

रिक्त स्थान के प्रति YAML की सहनशीलता के कारण ही छोटी-छोटी गलतियाँ ढूंढ़ना कठिन होता है। इंडेंटेशन के लिए टैब अवैध हैं, एक गायब कोलन मैपिंग को एक स्ट्रिंग में बदल देता है, और डुप्लिकेट कुंजियाँ कुछ पार्सर्स द्वारा स्वीकार कर ली जाती हैं और दूसरों द्वारा अस्वीकार कर दी जाती हैं। जब कोई रूपांतरण विफल हो जाता है, तो एकमात्र उपयोगी संदेश पंक्ति और कॉलम को नाम देता है और आपत्तिजनक अंश दिखाता है:

                spec:
  containers:
	- name: web      # tab used for indentation
error: line 3, column 0 — tabs cannot be used for indentation
              

डुप्लिकेट कुंजियाँ खतरनाक मामला हैं: YAML पार्सर आमतौर पर अंतिम मान रखते हैं और कुछ नहीं कहते हैं। यदि `replicas: 3` दो बार प्रकट होता है, तो आपको जो JSON मिलता है वह पूरी तरह से वैध दिखता है - और गलत संख्या।

यात्रा से बचने वाले नियमों का हवाला देते हुए

YAML की तुलना में JSON स्ट्रिंग्स के बारे में अधिक सख्त है, इसलिए रूपांतरण उन मानों के आसपास उद्धरण जोड़ते हैं जो नंगे थे। यह सामान्य है, लेकिन दो YAML विचित्रताएँ वास्तविक बग का कारण बनती हैं: `yes`, `no`, `on` और `off` YAML 1.1 में बूलियन हैं, लेकिन JSON शब्दार्थ में स्ट्रिंग्स, और ज़िप कोड और फ़ोन नंबर जैसे अग्रणी-शून्य मान संख्याओं के रूप में व्यवहार किए जाने पर अपना शून्य खो देते हैं। यदि किसी फ़ील्ड को रूपांतरण के दौरान एक स्ट्रिंग रहना चाहिए, तो उसे स्रोत में उद्धृत करें।

इसे स्थानीय रूप से चलाएँ, विशेष रूप से क्लस्टर कॉन्फ़िगरेशन के लिए

Kubernetes मैनिफ़ेस्ट नियमित रूप से `Secret` ऑब्जेक्ट में क्रेडेंशियल, कॉन्फ़िगमैप्स में कनेक्शन स्ट्रिंग और सीआई फ़ाइलों में टोकन ले जाता है। उन्हें वेब सेवा में चिपकाने से वे एक ऐसे सर्वर को सौंप दिए जाते हैं जिसे आप नियंत्रित नहीं करते हैं। एक ब्राउज़र-आधारित कनवर्टर उसी टैब में पार्स और क्रमबद्ध करता है जिसे आप पढ़ रहे हैं, इसलिए कुछ भी प्रसारित नहीं होता है - और एक पृष्ठ जो नेटवर्क कट ऑफ के साथ काम करता रहता है वह वादे के बजाय इसका प्रमाण है।

एक समझदार कार्यप्रवाह

  1. पहले YAML को सत्यापित करें और किसी भी रिपोर्ट की गई पंक्ति, कॉलम और अंश को ठीक करें।
  2. चुनें कि बहु-दस्तावेज़ फ़ाइलों को कैसे प्रबंधित किया जाना चाहिए - सरणी, या एक विशिष्ट दस्तावेज़।
  3. इंडेंटेशन के साथ कनवर्ट करें जो आपकी कोडबेस शैली (2 या 4 रिक्त स्थान) से मेल खाता है, और यदि आप अलग-अलग आउटपुट कर रहे हैं तो कुंजी को सॉर्ट करें।
  4. गिट में YAML को सत्य के स्रोत के रूप में रखें और JSON को एक उत्पन्न कलाकृति के रूप में मानें; टिप्पणियाँ केवल YAML में रहती हैं।

YAML से JSON - अक्सर पूछे जाने वाले प्रश्न

क्या YAML को JSON में परिवर्तित करने से टिप्पणियाँ ख़त्म हो जाती हैं?

हाँ। JSON में कोई टिप्पणी वाक्यविन्यास नहीं है, इसलिए YAML से JSON रूपांतरण के दौरान प्रत्येक टिप्पणी हटा दी जाती है। यही मुख्य कारण है कि टीमें YAML को लेखकीय प्रारूप के रूप में रखती हैं और JSON को दूसरे तरीके के बजाय बिल्ड आउटपुट के रूप में पुन: उत्पन्न करती हैं।

केवल एक इंडेंटेशन संदेश के साथ मेरा YAML विफल क्यों हो जाता है?

इंडेंटेशन YAML की संरचना है। एक टैब वर्ण, एक स्थान से बाहर या एक स्तर पर बहुत गहराई तक इंडेंट की गई कुंजी सभी दस्तावेज़ के अर्थ को बदल देती है, इसलिए पार्सर्स पहली अस्पष्टता पर रुक जाते हैं। समाधान यह है कि रिपोर्ट की गई पंक्ति को अंश के साथ पढ़ा जाए और उसकी तुलना ऊपर की पंक्ति से की जाए।

क्या ब्राउज़र YAML से JSON कनवर्टर Kubernetes रहस्यों के लिए सुरक्षित है?

यह तब होता है जब रूपांतरण पूरी तरह से पृष्ठ में चलता है। YamlBox कनवर्टर एक बंडल YAML लाइब्रेरी के साथ स्थानीय रूप से पार्स करता है, कोई नेटवर्क कॉल नहीं करता है, और अक्षम नेटवर्क के साथ काम करना जारी रखता है - इसलिए एक गुप्त मैनिफ़ेस्ट कभी भी टैब नहीं छोड़ता है।

इस पोस्ट में उल्लिखित उपकरण

19 टूल की पूरी सूची ब्राउज़ करें

पढ़ने के लिए और लेख

5 मिनट पढ़ें

JSON से YAML: मशीन आउटपुट को फिर से पढ़ने योग्य बनाना

इंडेंटेशन और उद्धरण नियंत्रणों के साथ ब्राउज़र में JSON को YAML में कनवर्ट करें - और उद्धरण जाल सीखें जो एक साफ़ कॉन्फ़िगरेशन को टूटे हुए कॉन्फ़िगरेशन में बदल देते हैं।

6 मिनट पढ़ें

JSON फ़ॉर्मेटर: सुंदर, छोटा, और वास्तव में मान्य

एक JSON फ़ॉर्मेटर जो सटीक त्रुटि स्थानों के साथ सुंदर-प्रिंट, छोटा और मान्य करता है - साथ ही लगभग हर अमान्य JSON त्रुटि के पीछे पाँच सिंटैक्स गलतियाँ।

6 मिनट पढ़ें

JSON अंतर: डेटा की तुलना उस तरह से करना जैसे वह वास्तव में

एक संरचनात्मक JSON अंतर के साथ दो JSON पेलोड की तुलना करें जो कुंजी क्रम और रिक्त स्थान को अनदेखा करता है, स्थानांतरित मानों को हाइलाइट करता है, और दिखाता है कि पाठ भिन्न क्यों गुमराह करता है।

सभी 19 पोस्ट →