JSON से XML

अपने ब्राउज़र में JSON को सुगठित (well-formed) XML में बदलें। रूट एलिमेंट का नाम चुनें, XML घोषणा शामिल करें या छोड़ें, और 2 स्पेस, 4 स्पेस या कोई इंडेंटेशन चुनें।

एक JSON ट्री को एलिमेंट पर मैप करें, सुरक्षित रूप से। JSON पेस्ट करें और सुगठित XML वापस पाएँ। सरणियाँ दोहराए गए एलिमेंट बन जाती हैं, अमान्य कुंजी नाम वैध एलिमेंट नामों में बदल दिए जाते हैं, और घोषणा व इंडेंटेशन दोनों आप पर निर्भर हैं।

XML आउटपुट

JSON को XML पर मैप करना बिना परेशान हुए

दो मॉडल मेल नहीं खाते

JSON के छह मान प्रकार होते हैं — object, array, string, number, boolean और null — और इनमें से हर एक स्व-वर्णनात्मक है। XML में ठीक एक प्रिमिटिव है: टेक्स्ट। बाकी सब कुछ एलिमेंट और एट्रिब्यूट से निर्मित संरचना है। दोनों के बीच कोई आधिकारिक मैपिंग नहीं है, जिस कारण आपके द्वारा मिलने वाला हर कन्वर्टर थोड़ा अलग व्यवहार करता है।

यहाँ प्रयुक्त परंपरा सबसे सामान्य और सबसे भविष्यवाणी योग्य है। एक ऑब्जेक्ट एक एलिमेंट बन जाता है जिसके बच्चे उसकी कुंजियाँ होती हैं। एक string, number या boolean एक एलिमेंट बन जाता है जिसमें उसका टेक्स्ट रूप होता है। null एक खाली एलिमेंट बन जाता है। यह सरणियाँ छोड़ देता है, जिनका XML में कोई समकक्ष ही नहीं है: मानक उपाय यह है कि पैरेंट एलिमेंट को हर आइटम के लिए एक बार दोहराया जाए, ताकि {"item": [1, 2]} बन जाए <item>1</item><item>2</item> न कि कोई रैपर एलिमेंट जिसकी प्राप्त करने वाली स्कीमा अपेक्षा नहीं करती।

हर JSON कुंजी वैध एलिमेंट नाम नहीं होती

XML एलिमेंट नाम NCName उत्पादन का पालन करते हैं: वे किसी अक्षर या अंडरस्कोर से शुरू होते हैं, फिर अक्षर, अंक, हाइफ़न, बिंदु और अंडरस्कोर की अनुमति देते हैं। कोई स्पेस नहीं, कोई स्लैश नहीं, कोई अग्रणी अंक नहीं, और कुछ भी xml अक्षरों से किसी भी केस में शुरू नहीं होता, जिसे स्पेसिफ़िकेशन आरक्षित करता है।

JSON कुंजियों पर ऐसा कोई प्रतिबंध नहीं है — वे स्वेच्छ टेक्स्ट होते हैं, और वास्तविक दुनिया के पेलोड "user name", "2024" और "@type" से भरे होते हैं। उन्हें यथावत उत्सर्जित करने से एक ऐसा दस्तावेज़ बनता है जिसे कोई पार्सर स्वीकार नहीं करेगा। इसलिए अमान्य वर्णों को अंडरस्कोर से बदल दिया जाता है और जब कोई नाम किसी अंक से शुरू होता है तो एक अग्रणी अंडरस्कोर जोड़ दिया जाता है। यह एक हानिपूर्ण (lossy) चरण है, इसलिए यदि एलिमेंट नाम डाउनस्ट्रीम में मायने रखते हैं, तो कन्वर्टर के अनुमान लगाने के बजाय JSON में कुंजियों का पहले पुनः नामकरण करें।

घोषणा, इंडेंटेशन और क्या बदलना सुरक्षित है

<?xml ... ?> घोषणा UTF-8 दस्तावेज़ों के लिए वैकल्पिक है; पार्सर UTF-8 मान लेते हैं जब वह अनुपस्थित हो। इसे शामिल करें जब फ़ाइल डिस्क पर लिखी जाएगी, HTTP के माध्यम से परोसी जाएगी या किसी सख्त एंटरप्राइज़ पाइपलाइन को सौंपी जाएगी, और इसे छोड़ दें जब टुकड़ा किसी बड़े दस्तावेज़ के अंदर एम्बेड किया जा रहा हो, जहाँ दूसरी घोषणा एक घातक त्रुटि है।

इंडेंटेशन अधिक सूक्ष्म चुनाव है। JSON के विपरीत, एलिमेंट के अंदर XML रिक्त स्थान सामग्री का हिस्सा है, इसलिए प्रीटी-प्रिंटिंग तकनीकी रूप से दस्तावेज़ को बदल देती है: एक एलिमेंट जिसमें Ada था अब एक न्यूलाइन, कुछ स्पेस, Ada, एक न्यूलाइन और और स्पेस रखता है। अधिकांश स्कीमा इसे अनदेखा करते हैं, लेकिन सिग्नेचर सत्यापन, xml:space="preserve" अनुभाग और रिक्त-स्थान-संवेदी प्रारूप नहीं करते। जब आप पढ़ रहे हों तब इंडेंटेशन का उपयोग करें, और किसी भी ऐसी चीज़ के लिए मिनिफ़ाइड आउटपुट पर स्विच करें जिसे मशीन उपभोग करेगी।

ओपन-सोर्स सूचना: वैनिला JavaScript में किसी तृतीय-पक्ष लाइब्रेरी के बिना कार्यान्वित।

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

क्या मेरा JSON कहीं अपलोड किया जाता है?
नहीं। दस्तावेज़ पूरी तरह आपके ब्राउज़र में अंतर्निहित JSON फ़ंक्शन का उपयोग करके पार्स और सीरियलाइज़ किया जाता है, इसलिए कुछ भी सर्वर को नहीं भेजा जाता।
JSON सरणियों को कैसे दर्शाया जाता है?
पैरेंट एलिमेंट को हर आइटम के लिए एक बार दोहराकर। {"item": [1, 2]} बन जाता है <item>1</item><item>2</item>, जो अधिकांश XML स्कीमा की अपेक्षित परंपरा है।
जो कुंजियाँ वैध एलिमेंट नाम नहीं हैं उनके साथ क्या होता है?
अवैध वर्ण अंडरस्कोर बन जाते हैं और यदि नाम किसी अंक से शुरू होता है तो एक अग्रणी अंडरस्कोर जोड़ दिया जाता है। यदि सटीक नाम मायने रखते हैं तो पहले कुंजियों का पुनः नामकरण करें।
मेरे आउटपुट में XML घोषणा क्यों गायब है?
यह वैकल्पिक है और एक चेकबॉक्स द्वारा नियंत्रित है। बिना उसके पार्सर डिफ़ॉल्ट UTF-8 मान लेते हैं, और इसे छोड़ना ही चाहिए जब आउटपुट किसी अन्य दस्तावेज़ के अंदर एम्बेड हो।
क्या मान एट्रिब्यूट के रूप में लिखे जाते हैं?
नहीं। हर मान एलिमेंट टेक्स्ट बन जाता है। एट्रिब्यूट सादे JSON से अनुमानित नहीं किए जा सकते, इसलिए उन्हें चुनने के लिए एक स्कीमा की आवश्यकता होगी जो इस उपकरण के पास नहीं है।
क्या इंडेंटेशन दस्तावेज़ के अर्थ को बदलता है?
तकनीकी रूप से हाँ, क्योंकि एलिमेंट के अंदर रिक्त स्थान सामग्री है। अधिकांश स्कीमा इसे अनदेखा करते हैं, लेकिन हस्ताक्षरित या रिक्त-स्थान-संवेदी XML के लिए मिनिफ़ाइड आउटपुट का उपयोग करें।