हिन्दी

सिंटैक्स कन्वर्टर्स क्या करते हैं

JSON, YAML, XML, TOML और CSV में समान चीजें नहीं हैं। यह पेज सटीक रूप से बताता है कि प्रत्येक आकृति को कैसे मैप किया जाता है, कौन से रूपांतरण हानिपूर्ण हैं, और टूल क्या करने से इंकार करता है।

यह क्या परिवर्तित करता है

नौ निर्देशित रूपांतरण: JSON से YAML, YAML से JSON, JSON से XML, XML से JSON, JSON TOML, TOML से JSON, YAML से TOML, TOML से YAML, और JSON से CSV। प्रत्येक आपके ब्राउज़र टैब में चलता है; कुछ भी अपलोड नहीं किया गया है.

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

CSV केवल लिखने योग्य है, और जानबूझकर ऐसा किया गया है। CSV को पढ़ने का अर्थ है एक सीमांकक, एक उद्धरण बोली, क्या पहली पंक्ति एक हेडर है, और प्रत्येक सेल के लिए एक प्रकार का अनुमान लगाना - चार अनुमान, जिनमें से प्रत्येक एक कन्वर्टर चुपचाप गलत हो जाता है। यह एक टूल का काम है जो पूछता है।

XML: विशेषताएँ, सरणियाँ और हमारे द्वारा चुने गए नियम

XML में कोई विहित JSON मैपिंग नहीं है, इसलिए सम्मेलनों को चुनना पड़ा। वे स्क्रीन पर तब दिखाई देते हैं जब XML दो प्रारूपों में से एक होता है, और वे ये हैं।

विशेषताएँ @ के साथ उपसर्ग लगाकर ऑब्जेक्ट कुंजियाँ बन जाती हैं। <user id="7"><name>Ada</name></user> को {"user":{"@id":"7","name":"Ada"}} के रूप में पढ़ा जाता है। उपसर्ग वह है जो एक विशेषता और एक ही नाम के चाइल्ड तत्व को एक कुंजी में ढहने से बचाता है - <user id="7"><id>other</id></user> दोनों को रखता है।

किसी तत्व के अंदर का टेक्स्ट जिसमें विशेषताएँ या चाइल्ड तत्व भी होते हैं, कुंजी #text के अंतर्गत रहता है। एक तत्व जिसमें पाठ के अलावा कुछ भी नहीं है, उस पाठ में ढह जाता है। एक CDATA अनुभाग #cdata के अंतर्गत रहता है, इसलिए इसकी सामग्री मार्कअप के बजाय स्पष्ट रूप से डेटा है।

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

नेमस्पेस उपसर्गों को शब्दशः रखा जाता है: <ns:item> कुंजी ns: आइटम है और xmlns:ns विशेषता @xmlns:ns है। कुछ भी हल नहीं किया जाता है, दोबारा लिखा या हटाया नहीं जाता है, क्योंकि किसी उपसर्ग को हल करने से दस्तावेज़ में वास्तव में मौजूद पाठ गायब हो जाता है।

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

XML लिखना, एक कुंजी जो कानूनी XML तत्व का नाम नहीं है - एक स्थान के साथ, एक अंक से शुरू होने वाला, एक अक्षर xml से शुरू होने वाला - चुपचाप फिर से लिखने के बजाय नाम से इनकार कर दिया जाता है। एक चुपचाप नामित तत्व एक दस्तावेज़ तैयार करता है जो किसी भी चीज़ के विरुद्ध मान्य होता है।

बाहरी संस्थाओं को अस्वीकार कर दिया गया है, केवल अक्षम नहीं किया गया है

एक XML दस्तावेज़ DOCTYPE में संस्थाओं की घोषणा कर सकता है। एक पार्सर जो उन्हें विस्तारित करता है वह XXE भेद्यता है: एक इकाई जिसे SYSTEM "फ़ाइल:///etc/passwd" घोषित किया गया है, एक स्थानीय फ़ाइल को पढ़ती है, एक URL पर इंगित करने वाला एक हमलावर नियंत्रण का अनुरोध करता है, और आंतरिक संस्थाओं की एक श्रृंखला "बिलियन लाफ़्स" सेवा से इनकार करती है जो कुछ सौ बाइट्स को गीगाबाइट में बदल देती है।

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

व्यावहारिक लागत: DOCTYPE वाला दस्तावेज़ हानिरहित होने पर भी यहां परिवर्तित नहीं होगा। यदि सामग्री आपकी है तो DOCTYPE हटाएं।

TOML डेटाटाइम का कहीं और कोई समकक्ष नहीं है

TOML 1.0 के चार अस्थायी प्रकार हैं और JSON, YAML और XML में कोई नहीं है: ऑफसेट दिनांक-समय (1979-05-27T07:32:00Z), स्थानीय दिनांक-समय (1979-05-27T07:32:00, बिना किसी क्षेत्र के, जानबूझकर), स्थानीय तिथि (1979-05-27) और स्थानीय समय (07:32:00)।

प्रत्येक RFC 3339 स्ट्रिंग बन जाता है, जैसा कि लिखा गया था, और रूपांतरण आपको बताता है कि उसने किन मानों के साथ ऐसा किया और प्रत्येक चार प्रकार में से कौन सा था। विकल्प - चारों के लिए एक एकल UTC तत्काल उत्सर्जित करना - एक स्थानीय समय को उस क्षेत्र में ले जाएगा जिसे दस्तावेज़ ने स्पष्ट रूप से बताने से इनकार कर दिया है, जो हानिपूर्ण होने के बजाय एक गलत उत्तर है।

वापस कन्वर्ट करने से उद्धृत स्ट्रिंग उत्पन्न होती है, डेटाटाइम नहीं। इसलिए TOML से JSON से TOML राउंड ट्रिप उन मानों के प्रकार को बदल देती है। ऐसी परंपरा का आविष्कार किए बिना इसका कोई रास्ता नहीं है जिसे प्राप्त करने वाले टूल को साझा करना होगा, और चुपचाप किCAक का आविष्कार करना और भी बुरा होगा।

TOML पूर्णांकों पर हस्ताक्षर किए जाते हैं 64-बिट; JSON संख्याएं IEEE-754 दोगुनी हैं। 2^53 - 1 से आगे एक पूर्णांक एक स्ट्रिंग बन जाता है, जिसका पथ एक चेतावनी में नामित होता है, इसके अंतिम अंक एक गोलाई में खोने के बजाय जिसे आप नोटिस नहीं करेंगे।

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

YAML: एंकर, धाराएँ और नॉर्वे समस्या

YAML को एक प्रतिबंधित स्कीमा के साथ पढ़ा जाता है जो केवल स्ट्रिंग, संख्याएं, बूलियन, शून्य, सूचियां और मानचित्र उत्पन्न कर सकता है। टैग जो मनमानी वस्तुओं का निर्माण करते हैं - !!js/function, !!python/object/apply, !!बाइनरी - अस्वीकार कर दिए जाते हैं, यही कारण है कि प्रतिबंध मौजूद है: एक लोडर जो उनका सम्मान करता है वह एक मनमाना-ऑब्जेक्ट कंस्ट्रक्टर है जो कॉन्फ़िगरेशन फ़ाइल के कपड़े पहनता है।

एंकर और उपनाम को दोहराए गए डेटा में हल किया जाता है। एक दस्तावेज़ जो एक बार उपनामों का पालन करने पर दस लाख मानों से आगे बढ़ जाता है, उसे टैब को फ़्रीज़ करने की अनुमति देने के बजाय अस्वीकार कर दिया जाता है; पुनरावर्ती उपनाम को सिरे से अस्वीकार कर दिया जाता है, क्योंकि यहां कोई अन्य प्रारूप किसी चक्र को व्यक्त नहीं कर सकता है।

--- द्वारा अलग किए गए कई दस्तावेज़ों की एक धारा दस्तावेज़ों की एक श्रृंखला बन जाती है, और रूपांतरण ऐसा कहता है। इस टूल में किसी अन्य प्रारूप में कोई स्ट्रीम नहीं है, इसलिए एक सरणी ही एकमात्र ईमानदार मैपिंग है।

YAML बार-बार मैपिंग कुंजी को रोकता है, और प्रत्येक पार्सर एक को अलग तरीके से संभालता है। यह टूल अंतिम मान रखता है - नियम JSON.parse का उपयोग करता है - और दोहराव की स्थिति के साथ आपको बताता है कि यह हुआ। किसी दस्तावेज़ को चुपचाप ख़ारिज करना और भी बुरा होगा; बिना कहे चुपचाप कोई मूल्य चुनना और भी बुरा होगा।

नॉर्वे की समस्या: YAML 1.1 में, गैर-उद्धृत स्केलर y, हाँ, चालू, नहीं, बंद और देश कोड NO सभी बूलियन को हल करते हैं, इस प्रकार देश कोड की एक सूची सत्य और असत्य की सूची में बदल जाती है। यह टूल YAML 1.2 पढ़ता है, जहां केवल सत्य और असत्य बूलियन हैं, इसलिए NO स्ट्रिंग NO ही रहता है। जब यह YAML लिखता है तो यह प्रत्येक स्ट्रिंग को उद्धृत करता है जिसे 1.1 पार्सर गलत पढ़ता है - 'नहीं', 'हां', 'चालू', '1.0', '0755', '2001-12-14' - इसलिए आउटपुट उस टूल पर फीड करना सुरक्षित है जो 1.2 पर नहीं गया है। इसमें कुछ उद्धरण चिह्न खर्च होते हैं और शुद्धता प्राप्त होती है।

संख्याओं की तरह दिखने वाली स्ट्रिंग्स इसी कारण से अपने उद्धरण रखती हैं: "0755" 755 बनने के बजाय एक स्ट्रिंग बनी रहती है, और "1.0" 1 बनने के बजाय एक स्ट्रिंग बनी रहती है।

टिप्पणियाँ हर दिशा में खो गई हैं। JSON, CSV और अन्य के पास उन्हें रखने के लिए कहीं नहीं है, और यह अनुमान लगाने का कोई तरीका नहीं है कि उन्हें वापस कहाँ जाना चाहिए।

JSON से CSV: चपटा होना, और एपॉस्ट्रॉफ़ जो किसी सूत्र को रोकता है

एक सरणी पंक्तियाँ बन जाती है, प्रति तत्व एक रिकॉर्ड। एक ऑब्जेक्ट जिसकी एकल संपत्ति में एक सरणी होती है, उस सरणी को पंक्तियों के रूप में उपयोग करती है, क्योंकि {"users": [ ... ]} भारी मात्रा में एक लेबल वाली एक तालिका है - और रूपांतरण ज़ोर से कहता है कि उसने ऐसा किया है। कोई भी अन्य वस्तु एक पंक्ति है। एक खाली स्ट्रिंग, संख्या या शून्य को अस्वीकार कर दिया जाता है: एक आयत को रिकॉर्ड की आवश्यकता होती है।

नेस्टेड ऑब्जेक्ट और सरणियों को बिंदीदार कॉलम नामों में समतल किया जाता है, जिसमें ऑब्जेक्ट कुंजी और सरणी सूचकांक दोनों के लिए एक बिंदु होता है: address.city, tags.0, tags.1। एक विभाजक, एक नियम. एक कुंजी जिसमें पहले से ही एक बिंदु है, उसके कॉलम नाम को नेस्टेड पथ के साथ अस्पष्ट बना देता है; यह टूल ऐसी भागने वाली योजना का आविष्कार करने के बजाय चेतावनी देता है जिसे कोई भी स्प्रेडशीट नहीं समझ सकेगी।

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

उद्धरण इस प्रकार है RFC 4180: एक फ़ील्ड जिसमें सीमांकक, एक दोहरा उद्धरण, CR या LF होता है, दोहरे उद्धरण चिह्नों में संलग्न होता है और एक एम्बेडेड उद्धरण दो बार लिखा जाता है। रिकॉर्ड्स को CRLF द्वारा अलग किया जाता है। अग्रणी या अनुगामी रिक्त स्थान वाले फ़ील्ड को भी उद्धृत किया जाता है, क्योंकि अन्यथा स्प्रेडशीट चुपचाप उन्हें ट्रिम कर देती है। यूनिकोड अपरिवर्तित होकर गुजरता है, और उन स्प्रैडशीट्स के लिए एक बाइट-ऑर्डर चिह्न उपसर्ग किया जा सकता है जिन्हें पढ़ने के लिए UTF-8 की आवश्यकता होती है।

फार्मूला इंजेक्शन वह है जो काटता है। =, +, -, @ से शुरू होने वाला एक सेल, एक टैब या कैरिएज रिटर्न को एक्सेल, लिबरऑफिस कैल्क और Google शीट्स द्वारा फ़ाइल खोले जाने के क्षण में एक सूत्र के रूप में निष्पादित किया जाता है। =cmd|'/c calc'!A1 वह प्रदर्शन है जिसे हर कोई उद्धृत करता है; =IMPORTXML(...) वह है जो चुपचाप शीट को कहीं भेज देता है। एक कन्वर्टर जो ऐसी स्ट्रिंग शब्दशः लिखता है, उसने आपके डेटा को किसी और के कोड निष्पादन में, निष्क्रिय दिखने वाली फ़ाइल में बदल दिया है।

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

CSV शून्य से खाली स्ट्रिंग नहीं बता सकता। दोनों एक खाली सेल बन जाते हैं, और रूपांतरण शून्य को गिनता है ताकि आप जान सकें कि यह हुआ।

सीमाएं, और जब आप एक पर प्रहार करते हैं तो क्या होता है

प्रत्येक प्रारूप में एक वर्ण सीमा होती है, जिसे पार्सर डाउनलोड करने से पहले ही लागू किया जाता है: 8 करोड़ के लिए JSON, 4 करोड़ के लिए XML और एक के लिए CSV स्रोत, 2 करोड़ के लिए YAML और TOML. इसके अलावा टूल एक अनुत्तरदायी टैब बनने के बजाय सटीक संख्या से इनकार कर देता है जो आपके द्वारा चिपकाए गए को खो देता है।

CSV आउटपुट को अतिरिक्त रूप से 100,000 पंक्तियों और 2,000 कॉलम पर कैप किया जाता है, क्योंकि एक गहराई से नेस्टेड सरणी प्रति तत्व एक कॉलम में समतल हो जाती है और JSON के कुछ मेगाबाइट एक तालिका बन सकते हैं, कोई भी स्प्रेडशीट नहीं खुलेगी।

खाली और खाली स्थान वाले इनपुट को शून्य या खाली दस्तावेज़ में परिवर्तित करने के बजाय खाली के रूप में रिपोर्ट किया जाता है। सभी चार पठनीय प्रारूपों में एक पंक्ति और एक कॉलम के साथ अमान्य वाक्यविन्यास की सूचना दी गई है।

पार्सर स्वयं तभी डाउनलोड होते हैं जब रूपांतरण के लिए उनकी आवश्यकता होती है। JWT को डीकोड करने के लिए टूलकिट खोलने पर उनमें से कोई भी नहीं मिलता है।

आप जो चिपकाते हैं उसका क्या होता है

  • प्रत्येक रूपांतरण, हैश, डिकोड और अंतर आपके ब्राउज़र टैब में चलता है। सर्वर पर कोई इनपुट अपलोड, लॉग या संग्रहीत नहीं किया जाता है, क्योंकि पेज लोड होने के बाद कोई सर्वर शामिल नहीं होता है।
  • हैश ब्राउज़र के अपने Web Crypto कार्यान्वयन से आते हैं, और UUID इसके क्रिप्टोग्राफ़िक रूप से सुरक्षित यादृच्छिक जनरेटर से आते हैं। न ही नेटवर्क कॉल शामिल है।
  • आपके द्वारा टाइप किया गया कुछ भी स्थानीय संग्रहण या कुकी पर नहीं लिखा जाता है। पेज को पुनः लोड करने से वह ख़ारिज हो जाता है; टैब बंद करने से वह ख़ारिज हो जाता है।
  • साइट-व्यापी विश्लेषण केवल कॉन्फ़िगर किए गए कैनोनिकल प्रोडक्शन होस्ट पर चलता है और गोपनीयता नीति में इसका खुलासा किया गया है; स्थानीय और पूर्वावलोकन होस्ट इसे अस्वीकार कर देते हैं। चिपकाए गए मान, टोकन, URL और फ़ाइल सामग्री को ToolAcre के स्वयं के विश्लेषण ईवेंट से बाहर रखा गया है। वर्तमान कॉन्फ़िगरेशन में विज्ञापन अक्षम है.
  • उसने कहा: JWT या API कुंजी एक लाइव क्रेडेंशियल है। सुरक्षित आदत यह है कि इसे कभी भी किसी ऐसे वेब पेज पर पेस्ट न करें जिसे आपने नहीं लिखा है, भले ही इसके दावे कितने भी भरोसेमंद हों - इसमें यह भी शामिल है।

प्रश्न

मेरा XML दस्तावेज़ "DOCTYPE घोषित करता है" के साथ विफल क्यों होता है?

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

मेरा TOML डेटाटाइम उद्धृत स्ट्रिंग के रूप में वापस क्यों आया?

क्योंकि JSON, YAML और XML का कोई दिनांक प्रकार नहीं है। डेटाटाइम को RFC 3339 टेक्स्ट में परिवर्तित कर दिया गया था, जैसा कि लिखा गया था, जो कि हर दूसरे प्रारूप में एक स्ट्रिंग है। इसलिए वापस कन्वर्ट करने से एक स्ट्रिंग उत्पन्न होती है, और टूल आपको बाद में पता लगाने के बजाय ऐसा होने पर तुरंत चेतावनी देता है।

मेरी CSV कोशिकाओं में से एक एपॉस्ट्रॉफी से क्यों शुरू होती है?

क्योंकि इसका टेक्स्ट =, +, -, @ से शुरू होता है, एक टैब या एक कैरिएज रिटर्न, और एक स्प्रेडशीट फ़ाइल खोलने पर ऐसे सेल को सूत्र के रूप में निष्पादित करता है। एपोस्ट्रोफ सेल को पाठ के रूप में चिह्नित करता है; एक बार सेल पढ़ने के बाद यह मान का हिस्सा नहीं है। आप भागने को बंद कर सकते हैं, और टूल आपको बताएगा कि इसका क्या मतलब है।

एक दोहराया गया XML तत्व एक सरणी क्यों नहीं है?

क्योंकि XML किसी सूची को एकल मान से अलग करने का कोई तरीका प्रदान नहीं करता है। दोनों एक जैसे लिखे गए हैं. किसी भी दिशा में अनुमान लगाना आधे समय गलत होगा, इसलिए टूल रिपोर्ट करता है कि वास्तव में क्या है।

क्या मैं यहां CSV को वापस JSON में बदल सकता हूं?

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

"नहीं" को असत्य में क्यों नहीं बदला जाता?

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

सीमाएँ

  • CSV लिखा है, कभी पढ़ा नहीं. यहां, पसंद से कोई CSV से JSON रूपांतरण नहीं है।
  • टिप्पणियाँ हर दिशा में, हर प्रारूप में खो जाती हैं।
  • TOML डेटाटाइम हर दूसरे प्रारूप में एक स्ट्रिंग बन जाता है, इसलिए TOML राउंड ट्रिप उन प्रकारों को बदल देती है। कोई हानि रहित मार्ग नहीं है.
  • एक XML दस्तावेज़ जिसमें DOCTYPE होता है, हानिरहित दस्तावेजों सहित, पूरी तरह से अस्वीकार कर दिया जाता है, और इनकार को बंद नहीं किया जा सकता है।
  • एक बार दोहराए गए XML तत्व को एक गैर-दोहराए गए तत्व से अलग नहीं किया जा सकता है, इसलिए XML से JSON से XML हमेशा मूल आकार वापस नहीं करता है।
  • XML मिश्रित सामग्री - बाल तत्वों के साथ मिश्रित पाठ - बच्चों के सापेक्ष पाठ की स्थिति खो देता है, और राउंड-ट्रिप नहीं कर सकता है।
  • XML मान स्ट्रिंग हैं जब तक कि प्रकार का अनुमान चालू नहीं किया जाता है, क्योंकि XML कोई प्रकार घोषित नहीं करता है; अनुमान के साथ, "0755" और "NO" सामान्य गलतवाचन के अधीन हैं।
  • TOML में कोई शून्य नहीं है: शून्य कुंजियाँ TOML आउटपुट से हटा दी जाती हैं और सरणियों के अंदर शून्य खाली स्ट्रिंग बन जाते हैं।
  • TOML दस्तावेज़ का मूल एक तालिका होना चाहिए, इसलिए JSON सरणी या स्केलर को TOML में बिल्कुल भी परिवर्तित नहीं किया जा सकता है।
  • JSON संख्याएं IEEE-754 दोगुनी हैं। 2^53 से पहले के पूर्णांकों को चुपचाप गोल करने के बजाय स्ट्रिंग में बदल दिया जाता है, जिससे उनका प्रकार बदल जाता है।
  • CSV एक खाली स्ट्रिंग को एक शून्य से अलग नहीं कर सकता; दोनों को एक खाली सेल के रूप में लिखा गया है।
  • CSV फ़्लैटनिंग ऑब्जेक्ट कुंजी और सरणी सूचकांक दोनों के लिए एक बिंदु का उपयोग करता है, इसलिए एक कुंजी जिसमें पहले से ही एक बिंदु होता है वह एक अस्पष्ट कॉलम नाम उत्पन्न करता है जिसके बारे में चेतावनी दी जाती है लेकिन बच नहीं जाता है।
  • YAML एंकर और उपनाम संरक्षित करने के बजाय हल किए जाते हैं; आउटपुट में कोई एंकर नहीं है, और एक पुनरावर्ती उपनाम से इनकार कर दिया गया है क्योंकि कोई भी लक्ष्य प्रारूप एक चक्र को व्यक्त नहीं कर सकता है।
  • इनपुट प्रति प्रारूप सीमित है - JSON के लिए 8 मिलियन वर्ण, XML के लिए 4 मिलियन, YAML और TOML के लिए 2 मिलियन - और बड़े दस्तावेज़ों को धीरे-धीरे संसाधित करने के बजाय अस्वीकार कर दिया जाता है।
  • यहां कुछ भी स्कीमा के विरुद्ध मान्य नहीं है। कोई दस्तावेज़ आसानी से परिवर्तित हो सकता है और फिर भी अपने उद्देश्य के लिए ग़लत हो सकता है।