JSON ↔ YAML रूपांतरण क्या है?
JSON (JavaScript Object Notation, RFC 8259) संरचित डेटा के लिए एक कड़े, मुड़ी हुई कोष्ठक-सीमांकित टेक्स्ट प्रारूप है; YAML (YAML Ain't Markup Language, संस्करण 1.2) JSON का एक सुपरसेट है जो उसी मूल्य मॉडल के लिए इंडेंटेशन, पंक्ति-विराम और अधिक पठनीय वाक्य-रचना का उपयोग करता है। दोनों के बीच रूपांतरण आपको एक ही कॉन्फ़िग को मशीन-अनुकूल रूप (API, स्कीमा सत्यापन और प्रोग्रामेटिक रूपांतरण के लिए JSON) और मानव-अनुकूल रूप (कोड समीक्षा, Kubernetes मैनिफ़ेस्ट, GitHub Actions वर्कफ़्लो के लिए YAML) के बीच बदलने देता है, बिना किसी एक कुंजी को दोबारा टाइप किए।
JSON ↔ YAML रूपांतरण कैसे काम करता है?
हर रूपांतरण आपके ब्राउज़र में संलग्न js-yaml लाइब्रेरी (MIT, संस्करण 4.1.0) के साथ स्थानीय रूप से चलता है। मुख्य चरण इस प्रकार हैं:
- मोड चयनकर्ता (स्वतः-पहचान / JSON → YAML / YAML → JSON) तय करता है कि कौन-सी पाइपलाइन चलेगी। स्वतः-पहचान मोड में इनपुट का पहला गैर-व्हाइट-स्पेस वर्ण दिशा चुनता है —
{या[का मतलब JSON; और कुछ हो तो YAML माना जाता है। - JSON → YAML:
JSON.parseइनपुट को मान्य करता है और एक JavaScript मूल्य उत्पन्न करता है;jsyaml.dump(value, { indent, lineWidth: -1, sortKeys: false })YAML 1.2 रूप लिखता है। बहु-दस्तावेज़ चालू होने पर इनपुट ऐरे का प्रत्येक तत्व अलग दस्तावेज़ के रूप में आउटपुट होकर---विभाजकों से जुड़ जाता है। - YAML → JSON:
jsyaml.loadAllइनपुट के हर दस्तावेज़ को पार्स करता है (---विभाजकों को स्वचालित संभालते हुए) और एक ऐरे बनाता है; एकल-दस्तावेज़ इनपुट खोला (unwrap) जाता है ताकि JSON आउटपुट केवल एक तत्व वाला ऐरे न होकर वह दस्तावेज़ ही हो। - इंडेंट (2 या 4 स्पेस) और सुंदर प्रिंट दोनों कॉन्फ़िगर किए जा सकते हैं। सुंदर प्रिंट बंद होने पर
JSON.stringify(value)बिना किसी व्हाइट-स्पेस के मिनिफ़ाइड JSON उत्सर्जित करता है। - आउटपुट केवल-पढ़ने योग्य टेक्स्टएरिया में लिखा जाता है। YAML पार्स विफलता पर त्रुटि संदेश में
js-yamlकीe.markद्वारा बताई गई 1-आधारित पंक्ति और स्तंभ संख्या शामिल होती है, जिससे आप सीधे बग पर पहुँच सकते हैं।
इस टूल से JSON और YAML क्यों रूपांतरित करें?
- गोपनीयता: हर पार्स, रूपांतरण और आउटपुट पास आपके ब्राउज़र में होता है। डेटा — Kubernetes सीक्रेट्स, हस्ताक्षरित JWT और मालिकाना कॉन्फ़िग सहित — हमारे सर्वर तक कभी नहीं पहुँचता।
- बहु-दस्तावेज़ YAML:
jsyaml.loadAll---विभाजकों को पहचानता है और दस्तावेज़ों का एक ऐरे लौटाता है, जिसे कनवर्टर एकल-डॉक मामलों में खोल देता है और बहु-डॉक मामलों में JSON ऐरे के रूप में रखता है। - ऐंकर और उपनाम हल किए जाते हैं: YAML की
&anchor/*aliasव्यवस्थाjs-yamlकी डिफ़ॉल्ट स्कीमा संभालती है। एक बार परिभाषित और दो बार संदर्भित मूल्य ऐसे JSON ऑब्जेक्ट में राउंड-ट्रिप होता है जहाँ सभी संदर्भों के मान बराबर होते हैं। - कोई CDN नहीं, कोई टेलीमेट्री नहीं:
js-yaml.min.jsलाइब्रेरी पृष्ठ के समान मूल से लोड होती है, इसलिए यह टूल ऑफ़लाइन, कॉर्पोरेट प्रॉक्सी के पीछे और एयर-गैप वाले परिवेशों में भी काम करता है।
JSON ↔ YAML रूपांतरण के सामान्य अनुप्रयोग क्या हैं?
DevOps, प्लेटफ़ॉर्म इंजीनियरिंग और API टूलिंग में JSON और YAML के बीच रूपांतरण हर जगह दिखता है:
- Kubernetes मैनिफ़ेस्ट: YAML के
Deployment,ConfigMapयाHelmReleaseको JSON में बदलें ताकि इन-हाउस नीति सत्यापक (Joi, Ajv, OPA Rego) उन्हें प्रोग्रामेटिक रूप से lint कर सकें, फिर क्लस्टर पर लागू करने के लिए वापस YAML में बदल दें। - CI/CD वर्कफ़्लो: GitHub Actions के
workflow.ymlको JSON के माध्यम से राउंड-ट्रिप करें ताकि कोड-जनरेटर मैट्रिक्स या जॉब निर्भरताओं को फिर से लिखे, फिर PR के लिए साफ़-सुथरा YAML उत्सर्जित करें। - OpenAPI विनिर्देश: किसी बैकएंड के स्वतः-उत्पन्न दस्तावेज़ के JSON
openapi.jsonको पेस्ट करें और रिपॉज़िटरी में चेक-इन किए जाने वाले मानव-संपादित संदर्भ के लिएopenapi.yamlमें बदलें।
JSON ↔ YAML राउंड-ट्रिप का उदाहरण कैसा दिखता है?
{"apiVersion":"apps/v1","kind":"Deployment","metadata":{"name":"web"},"spec":{"replicas":3,"selector":{"matchLabels":{"app":"web"}}}} पेस्ट करने और JSON → YAML मोड में रूपांतरित करें दबाने पर आठ पंक्तियों का इंडेंट किया हुआ YAML बनता है जिसकी पहली पंक्ति apiVersion: apps/v1 है। उस YAML को YAML → JSON मोड में सुंदर प्रिंट चालू करके वापस डालने पर JSON.stringify(value, null, 2) के बाद मूल ऑब्जेक्ट बाइट-दर-बाइट लौट आता है, और कुंजी क्रम भी बना रहता है क्योंकि js-yaml की डिफ़ॉल्ट स्कीमा दोनों दिशाओं में सम्मिलन क्रम का सम्मान करती है।
क्या यह JSON ↔ YAML कनवर्टर पूरी तरह से मेरे ब्राउज़र में चलता है?
हाँ। हर पार्स, रूपांतरण और आउटपुट पास आपके ब्राउज़र टैब के अंदर JavaScript के रूप में स्थानीय रूप से चलता है। संलग्न js-yaml लाइब्रेरी पृष्ठ के समान मूल से लोड होती है — कोई CDN नहीं, कोई fetch नहीं, कोई XMLHttpRequest नहीं, इनपुट पर कोई navigator.sendBeacon नहीं। पृष्ठ एक बार लोड हो जाने के बाद यह ऑफ़लाइन भी काम करता है, क्योंकि यह सहयोगी लाइब्रेरी सहित स्थैतिक HTML/CSS/JS बंडल है। Kubernetes सीक्रेट्स, JWT पेलोड, हस्ताक्षरित CloudFormation YAML और मालिकाना कॉन्फ़िग सब आपके डिवाइस पर ही रहते हैं।
कनवर्टर बहु-दस्तावेज़ YAML को कैसे संभालता है?
YAML एक ही स्ट्रीम में केवल --- वाली पंक्तियों से अलग किए गए अनेक दस्तावेज़ रख सकता है। YAML → JSON पर कनवर्टर jsyaml.loadAll को बुलाता है, जो हर दस्तावेज़ को JavaScript मूल्य के रूप में लौटाता है। अगर ठीक एक दस्तावेज़ मिलता है तो JSON आउटपुट सीधे वही दस्तावेज़ होता है; अगर दो या अधिक मिलते हैं तो JSON आउटपुट एक ऐरे होता है। JSON → YAML पर जब इनपुट JSON ऐरे हो और बहु-दस्तावेज़ टॉगल चालू हो, तब प्रत्येक ऐरे तत्व अपने अलग दस्तावेज़ के रूप में उत्सर्जित होता है और बीच में --- विभाजक रखे जाते हैं — JSON संसाधन ऐरे से kubectl apply-योग्य बंडल बनाने के लिए उपयोगी।
क्या YAML ऐंकर और उपनाम समर्थित हैं?
हाँ — लोड चरण में &anchor परिभाषाओं और *alias संदर्भों को js-yaml की डिफ़ॉल्ट स्कीमा हल करती है। defaults: &d\n retries: 3\n timeout: 30\njob_a:\n <<: *d\njob_b:\n <<: *d जैसा YAML इनपुट ऐसे JSON ऑब्जेक्ट में पार्स होता है जहाँ job_a और job_b दोनों में retries: 3, timeout: 30 होते हैं। मर्ज कुंजी << (YAML 1.1 का एक विस्तार जिसे js-yaml अब भी सम्मान देता है) भी डिफ़ॉल्ट स्कीमा पर समर्थित है।
JSON में जाते और वापस आते समय क्या YAML टिप्पणियाँ बनी रहती हैं?
नहीं — js-yaml पार्स चरण में टिप्पणियाँ हटा देता है, इसलिए YAML → JSON → YAML राउंड-ट्रिप में # से शुरू होने वाली हर पंक्ति खो जाती है। यह load/dump मॉडल की एक ज्ञात सीमा है; यदि टिप्पणियाँ संरक्षित रखना ज़रूरी हो, तो js-yaml के बजाय टिप्पणी-जागरूक लाइब्रेरी का उपयोग करें (जैसे yaml npm पैकेज, जो trivia बचाने के लिए डिज़ाइन किए गए CST + AST API के साथ आता है)। अधिकांश कॉन्फ़िग-रूपांतरण कार्यप्रवाहों के लिए यह समझौता स्वीकार्य है: राउंड-ट्रिप किया गया YAML सभी कुंजियाँ, मूल्य, ऐंकर और उपनाम संरक्षित रखता है, सिर्फ़ मानव-लिखित टिप्पणियाँ नहीं।
कस्टम YAML टैग्स का क्या होता है?
कनवर्टर js-yaml के DEFAULT_SCHEMA का उपयोग करता है, जो !!str, !!int, !!float, !!bool, !!null, !!seq, !!map, !!binary और !!timestamp को समझती है — यानी YAML 1.2 core और JSON स्कीमा के सभी टैग। कस्टम या एप्लिकेशन-विशिष्ट टैग (जैसे CloudFormation में !Ref, Ansible में !vault) पहचाने नहीं जाते और असमर्थित टैग का स्पष्ट उल्लेख करने वाली त्रुटि के रूप में सामने आते हैं। CloudFormation के लिए, इस कनवर्टर में पेस्ट करने से पहले कस्टम टैग्स को विस्तृत करने के लिए aws cloudformation package + --output-template-file प्रवाह का उपयोग करें।
यह JSON ↔ YAML कनवर्टर समान मूल पर js-yaml@4.1.0 के साथ आता है, बहु-दस्तावेज़ स्ट्रीम और ऐंकर/उपनाम को मूलतः समर्थन देता है, और YAML पार्स त्रुटियों को पंक्ति-स्तंभ संख्या के साथ रिपोर्ट करता है ताकि आप स्रोत को सीधे ठीक कर सकें। कोई अपलोड नहीं, कोई CDN नहीं, कोई टेलीमेट्री नहीं — हर बाइट आपके ब्राउज़र में ही रहता है।