हिन्दी

डेवलपर टूल · सिंटेक्स कन्वर्टर्स

JSON से XML रूपांतरण: मूल तत्व, सरणियाँ और अमान्य टैग नाम

· यह काम किस प्रकार करता है

json एक्सएमएल डेटा-प्रारूप

एक रूटलेस JSON सरणी बार-बार आइटम बच्चों के साथ एक XML रैपर में प्रवेश कर रही है
मूल ToolAcre वेक्टर चित्रण

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

बिना नाम वाली सरणी - एक शीर्ष-स्तरीय JSON सरणी जिसे एकल-रूटेड XML दस्तावेज़ बनना है, और रैपर तत्व जो दिखाई देता है

JSON `[1,2]` से शुरू हो सकता है; XML दो समकक्ष दस्तावेज़ तत्वों के साथ प्रारंभ नहीं हो सकता। ToolAcre इसलिए चयनित रूट नाम में एक रूट ऐरे लपेटता है और प्रत्येक सदस्य को दोहराए गए `<item>` चाइल्ड के रूप में लिखता है। चेतावनी उस परंपरा का नाम देती है, क्योंकि स्रोत में रैपर और आइटम के नाम मौजूद नहीं थे।

`numbers` चुनने से एक `<numbers>` दस्तावेज़ तत्व प्राप्त होता है जिसमें दो आइटम तत्व होते हैं। रूपांतरण नियतात्मक है, लेकिन विहित नहीं: किसी अन्य सिस्टम को `<number>` या एक विशेषता-असर संग्रह की आवश्यकता हो सकती है। रूट को जानबूझकर सेट करें और परिणाम की तुलना रिसीवर के आवश्यक XML अनुबंध से करें।

XML को बिल्कुल एक रूट की आवश्यकता है - क्यों प्रत्येक रूपांतरण एक रूट तत्व नाम का आविष्कार करता है या पूछता है

XML दस्तावेज़ में बिल्कुल एक मूल तत्व होना चाहिए। बिल्कुल एक साधारण शीर्ष-स्तरीय कुंजी वाला JSON ऑब्जेक्ट सीधे उस कुंजी का उपयोग कर सकता है। एक बहु-कुंजी ऑब्जेक्ट, सरणी, स्केलर या नल का कोई एकल प्रदत्त नाम नहीं है, इसलिए लेखक इसे `root` में संलग्न करता है जब तक कि उपयोगकर्ता कोई अन्य कानूनी नाम प्रदान नहीं करता है।

रैपर नियम क्रमांकन से पहले लागू किया जाता है और एक चेतावनी के रूप में सामने आता है। यह किसी स्कीमा द्वारा खोजा नहीं गया है और यह दावा नहीं करता है कि `<root>` का विरासत सेवा से कोई मतलब है। लिफाफे का नामकरण एकीकरण डिजाइन का हिस्सा है, जबकि कन्वर्टर केवल अपने स्वयं के मानचित्रण के तहत अच्छी तरह से गठित संरचना की गारंटी देता है।

सरणियों में कोई XML समतुल्य नहीं है - प्रति आइटम एक तत्व को दोहराते हुए, और स्केलर के सरणियों और सरणियों के सरणियों का प्रतिनिधित्व कैसे किया जाता है

सारणियाँ दोहराए जाने वाले तत्व बन जाती हैं। दस्तावेज़ रूट पर, सदस्य रैपर के नीचे `<item>` का उपयोग करते हैं। किसी ऑब्जेक्ट के अंदर, `line` के अंतर्गत संग्रहीत एक सरणी बार-बार `<line>` सहोदर बन जाती है। वस्तुओं की सारणी चाइल्ड फ़ील्ड के साथ बार-बार तत्व बनाती है; नेस्टेड सरणियों का कोई डोमेन नाम नहीं होता है और वे बिल्डर द्वारा उत्पादित सामान्य संरचना को प्राप्त करते हैं।

बाद में XML-to-JSON पढ़ने के बाद यह एक सरणी सदस्य और समान तत्व नाम वाले स्केलर के बीच अंतर खो देता है। XML घटनाएँ प्रदान करता है, स्वतंत्र सरणी मार्कर नहीं। यदि स्थिर कार्डिनैलिटी मायने रखती है, तो एक स्कीमा या एप्लिकेशन मैपिंग को इसकी आपूर्ति करनी होगी; एक सामान्य सीरिएलाइज़र अकेले इसे JSON-आकार वाले तत्व नामों से साबित नहीं कर सकता है।

कुंजियाँ जो तत्व नाम नहीं हो सकतीं - एक अंक से शुरू होने वाले नाम, जिसमें रिक्त स्थान या विराम चिह्न होते हैं, या 'xml' से शुरू होते हैं, और कन्वर्टर्स कैसे उनका नाम बदलते हैं या उनसे बचते हैं

रूपरेखा में सुझाव दिया गया है कि कन्वर्टर्स अवैध कुंजियों का नाम बदल सकते हैं या बच सकते हैं। ToolAcre उन्हें स्पष्ट रूप से मना कर देता है। एक रिक्त स्थान वाली कुंजी, एक अंक या हाइफ़न से शुरू होने वाली कुंजी, या आरक्षित अक्षरों `xml` से शुरू होने वाली कुंजी `UNSUPPORTED_SHAPE` को ट्रिगर करती है और आपत्तिजनक पथ को नाम देती है। मौन नाम बदलने से XML उत्पन्न होगा जो किसी भी सहमत स्कीमा से मेल नहीं खाता है।

मान्य नाम एक अक्षर, अंडरस्कोर या नेमस्पेस-शैली उपसर्ग से शुरू हो सकते हैं और शुरुआत के बाद अंक, अवधि, अंडरस्कोर, कोलन और हाइफ़न शामिल हो सकते हैं। विशेषता कुंजियाँ `@` का उपयोग केवल JSON कन्वेंशन के रूप में करती हैं; शेष विशेषता नाम को उसी जांच से गुजरना होगा। जानबूझकर स्रोत कुंजी का नाम बदलें या कोई अन्य लक्ष्य प्रारूप चुनें।

जो कुंजियाँ तत्व नाम नहीं हो सकतीं, उन्हें अस्वीकार कर दिया जाता है, उनका नाम कभी नहीं बदला जाता या हटाया नहीं जाता

संख्याओं और बूलियन को तत्व पाठ के रूप में क्रमबद्ध किया जाता है, इसलिए उनका JSON प्रकार अब XML द्वारा घोषित नहीं किया जाता है। परिणामस्वरूप डिफ़ॉल्ट रिवर्स रीडर स्ट्रिंग्स लौटाता है। यहां नल का कोई XML प्रतिनिधित्व नहीं है: यह एक खाली तत्व बन जाता है, जो एक खाली स्ट्रिंग से अप्रभेद्य होता है, और लेखक रिपोर्ट करता है कि कितने मानों में यह परिवर्तन हुआ।

इसका मतलब है कि `{ "a": null, "b": "" }` दो खाली तत्व उत्पन्न कर सकता है जो समान रूप से पढ़े जाते हैं। उस राउंड ट्रिप को दोषरहित कहना गलत होगा। विशेषताएँ, `#text` और `#cdata` कन्वर्टर के संरचनात्मक सम्मेलन को संरक्षित करते हैं, लेकिन वे एक सामान्य XML प्रकार की प्रणाली नहीं जोड़ते हैं।

प्रकार XML टेक्स्ट बन जाते हैं, जबकि शून्य एक स्वीकृत खाली-तत्व अस्पष्टता बन जाता है

`{"order":{"@id":"A-7","customer":"Ada","line":[{"sku":"P1","qty":2},{"sku":"P2","qty":1}],"note":null}}` का प्रयोग करें. एकल `order` कुंजी रूट बन जाती है, `@id` एक विशेषता बन जाती है, प्रत्येक पंक्ति ऑब्जेक्ट दोहराया गया `<line>` बन जाता है, और शून्य एक चेतावनी के साथ एक खाली `<note></note>` बन जाता है।

आउटपुट को अक्षम अनुमान के साथ वापस पढ़ें। विशेषता ID, मात्रा और पाठ मान स्ट्रिंग हैं, और लाइन एक सरणी है क्योंकि यह दो बार दिखाई देती है। यह खोए हुए शून्य और संख्यात्मक प्रकारों को उजागर करते हुए सटीक समर्थित व्युत्क्रम प्रदर्शित करता है। एक प्राप्त आदेश स्कीमा अन्य नामों या ऑर्डर की मांग कर सकती है, जिसे यह उदाहरण मान्य नहीं करता है।

इसमें क्या शामिल नहीं है - XML का उत्पादन जो किसी दिए गए XSD या नेमस्पेस से मेल खाता है, जिसके लिए हाथ से लिखी गई मैपिंग की आवश्यकता होती है

लेखक XSD का उपभोग नहीं करता है, नेमस्पेस यूआरआई निर्दिष्ट नहीं करता है या किसी व्यावसायिक स्कीमा से तत्व क्रम तय नहीं करता है। यह एक XML घोषणा लिखता है और कभी भी DOCTYPE उत्सर्जित नहीं करता है। नेमस्पेस उपसर्गों वाली कुंजियाँ वस्तुतः संरक्षित हैं, लेकिन यह नेमस्पेस रिज़ॉल्यूशन या प्रमाण नहीं है कि उपसर्ग सही ढंग से घोषित किया गया है।

किसी विशिष्ट सेवा द्वारा स्वीकृत XML उत्पन्न करने के लिए विशेषताओं, अनुक्रम बाधाओं, विकल्प समूहों और योग्य नामों की आवश्यकता हो सकती है। उस मैपिंग को बनाने के लिए इसकी वर्तमान स्कीमा या दस्तावेज़ का उपयोग करें। एक सामान्य रूपांतरण निरीक्षण और सरल डेटा-केंद्रित दस्तावेज़ों के लिए उपयुक्त है, अनुबंध-जागरूक क्रमबद्धता का विकल्प नहीं।

टेकअवे: इससे पहले कि आप इस पर निर्भर हों, आकार की भविष्यवाणी करें - और सिंटेक्स कन्वर्टर्स पैनल XML संरचना को कैसे दिखाता है जो JSON दस्तावेज़ बनाता है

परिणाम के आधार पर पहले लिफाफे, आइटम के नाम और प्रकार के नुकसान की भविष्यवाणी करें। ToolAcre एक रूट की कमी वाले मानों को लपेटता है, सरणियों को दोहराता है, विशेषताओं के लिए `@` कुंजियों को मैप करता है, शून्य को खाली पाठ से बदल देता है और प्रतिस्थापन का अनुमान लगाने के बजाय अवैध नामों को अस्वीकार कर देता है। प्रत्येक गैर-स्पष्ट परिवर्तन आउटपुट या चेतावनियों में दिखाई देता है।

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

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