मुख्य सामग्री पर जाएं
CuteJSON
↑↓ नेविगेट करें Enter चुनें Esc बंद करें

JSON को YAML में कैसे बदलें बिना क्लासिक 01234 बग के

प्रकाशित 2 मिनट का पाठ Akash Kinkar Pandey द्वारा

YAML JSON से काफी बड़ी भाषा है। हर JSON डॉक्यूमेंट वैलिड YAML है, लेकिन उल्टा सच नहीं है, जिसका मतलब है कि JSON to YAML कनवर्टर पूरी तरह से सही हो सकता है जबकि YAML to JSON कनवर्टर को YAML के उन हिस्सों को रिजेक्ट करना होता है जिन्हें JSON व्यक्त करने का कोई तरीका नहीं है।

JSON to YAML कनवर्टर का उपयोग करना

एक दिशा और इंडेंट चौड़ाई चुनें, फिर Convert दबाएं। YAML में लिखते समय, एक मैपिंग एक पंक्ति में एक कुंजी बन जाता है, एक एरे आइटम के हिसाब से अपना डैश दोहराता है, और एक null एक बिना किसी मान वाली कुंजी बन जाता है।

बग जिसके खिलाफ यह टूल विशेष रूप से सुरक्षित करता है

एक प्लेन YAML स्केलर जो नंबर, बूलियन, या YAML इंडिकेटर जैसा दिखता है, वह उस टाइप के रूप में गलत पढ़ा जाता है जब कोई फ़ाइल वापस पार्स करता है। 01234 का एक पिन कोड क्लासिक केस है: बिना कोट के लिखा, YAML पार्सर इसे नंबर 1234 के रूप में पढ़ता है और लीडिंग ज़ीरो हमेशा के लिए चला जाता है। वही समस्या "true" या "null" पढ़ने वाली स्ट्रिंग को भी लगती है।

बदलते हुए

{"zip":"01234","active":"true","note":null,"id":12345678901234567890}

बनता है:

zip: '01234'
active: 'true'
note: null
id: 12345678901234567890

दोनों स्ट्रिंग वैल्यूज़ विशेष रूप से कोटेड हैं क्योंकि उन्हें बिना कोट के छोड़ने से वापस आने पर उनका टाइप बदल जाता। असली null बिना कोट के लिखा जाता है, क्योंकि वह बिना कोट की सही वर्तनी है। बीस अंकों का id इंटैक्ट बच जाता है, क्योंकि यह JSON.parse द्वारा पार्स किए गए मान के बजाय टोकन स्ट्रीम से होकर जाता है।

रीडर क्या स्वीकार करता है और क्या रिजेक्ट करता है

YAML को वापस JSON में पढ़ते समय, टूल एक मैपिंग, एक सीक्वेंस, एक कोटेड स्ट्रिंग, एक ब्लॉक स्केलर, एक फ़्लो कलेक्शन, और एक फ़ोल्डेड प्लेन स्केलर को समझता है। यह एंकर्स, एलियास और टैग्स को चुपचाप अनदेखा करने के बजाय नाम से रिजेक्ट करता है, क्योंकि YAML के पास JSON के अंदर एक मान को एलियस करने का कोई समकक्ष नहीं है और ऐसा दिखावा करना एक ऐसा डॉक्यूमेंट बनाएगा जो सिर्फ सही दिखता है।

राउंड ट्रिपिंग

ऊपर के उदाहरण को YAML से वापस बदलने से मूल डॉक्यूमेंट एकदम वापस मिलता है: "01234" और "true" स्ट्रिंग्स के रूप में, null null के रूप में, और पूरा बीस अंकों का इंटेजर। वह राउंड ट्रिप असली परीक्षा है कि कनवर्टर की कोटिंग नियम सही हैं या नहीं, क्योंकि गलत नियम आमतौर पर तभी दिखता है जब आप वापस बदलकर तुलना करते हैं।

सभी लेखों पर लौटें