آپ کے آلے پر چلتا ہے · آپ کی فائل آپ کے آلے سے باہر نہیں جاتی۔
JSON پیسٹ کریں یا ڈالیں اور ایسی XML دستاویز لیں جس کے اوپر اعلان ہو اور ہر کی کا ایک عنصر۔ جس دستاویز کی اوپر کی سطح پر ایک ہی کی ہو وہ کی روٹ عنصر بنتی ہے؛ باقی ہر صورت میں سب کچھ <root> کے اندر جاتا ہے۔ فہرست اپنی کی کے نام کے دہرائے گئے عناصر بنتی ہے — "items": [..] سے کئی <items> عناصر بنتے ہیں — اور اوپر کی سطح کی فہرست <root> کے نیچے <item> عناصر بنتی ہے۔
@ سے شروع ہونے والی کیز ایٹریبیوٹ بنتی ہیں اور "#text" کی عنصر کا متن — وہی شکل جو XML سے JSON کا ٹول لکھتا ہے، اس لیے وہاں تبدیل کی گئی دستاویز یہاں سے وہی XML بن کر لوٹتی ہے۔ باقی ہر قدر اپنے عنصر کے اندر متن ہے، null خالی عنصر بنتا ہے، اور دستاویز ہر سطح پر دو خالی جگہوں سے ترتیب پاتی ہے۔ جو کیز XML نام کے طور پر قبول نہیں کرتا — ہندسے سے شروع، خالی جگہ یا علامتوں والی — انہیں انڈر اسکور سے صاف کیا جاتا ہے تاکہ نتیجہ ہمیشہ پارس ہو۔
متن صحیح طرح اسکیپ ہوتا ہے (&، <، > اور ایٹریبیوٹس میں واوین اور لائن بریک)؛ کنٹرول حروف، جو XML 1.0 میں رکھے ہی نہیں جا سکتے، ہٹا دیے جاتے ہیں۔ انکوڈنگ UTF-8 ہے، اور ڈاؤن لوڈ سے پہلے آپ پہلی 200 سطریں دیکھتے ہیں۔ کچھ اپ لوڈ نہیں ہوتا۔
ان کے لیے نہیں: کسی مخصوص XML اسکیما (SOAP، RSS، انوائس کا معیار) سے مطابقت — عناصر کے نام آپ کی JSON کیز پر چلتے ہیں، اسکیما پر نہیں۔
جو کی @ سے شروع ہو وہ ایٹریبیوٹ بنتی ہے اور "#text" کی عنصر کا متن بنتی ہے، اس لیے {"item": {"@id": 3, "#text": "A"}} سے <item id="3">A</item> بنتا ہے۔ جب دستاویز کی اوپر کی سطح پر ایک ہی کی ہو تو وہی روٹ عنصر بنتی ہے؛ ورنہ سب کچھ <root> کے اندر جاتا ہے۔
جو حرف XML نام میں جائز نہیں وہ انڈر اسکور بن جاتا ہے، اور جو نام کسی ایسے حرف سے شروع ہو جو شروع میں جائز نہیں، جیسے ہندسہ، اس کے آگے ایک انڈر اسکور لگتا ہے: "1st place" سے <_1st_place> بنتا ہے۔ کولن صرف تب رہتا ہے جب اس کا سابقہ اوپر کہیں اعلان شدہ ہو، جیسے "@xmlns:soap" میں؛ بغیر اعلان کے "soap:Body" سے <soap_Body> بنتا ہے، کیونکہ ورنہ نیم اسپیس سمجھنے والا کوئی پارسر اسے پڑھ نہ پاتا۔ کسی بھی رسم الخط کے حروف جائز ہیں، اس لیے "نام" یا "名前" جیسی کی جوں کی توں رہتی ہے۔
ہر قدر متن کے طور پر لکھی جاتی ہے، اور نمبر بالکل ویسے جیسے JSON میں ہیں: 1.0، 1.0 ہی رہتا ہے اور 12345678901234567890 اپنا ہر ہندسہ رکھتا ہے۔ null اور خالی آبجیکٹ دونوں <note/> جیسا خالی عنصر بنتے ہیں، اور خالی فہرست کچھ بھی نہیں لکھتی، اس لیے XML ان تینوں میں فرق نہیں بتا سکتی۔
کنٹرول حروف، یعنی 32 سے نیچے کے کوڈ سوائے ٹیب، لائن فیڈ اور کیریج ریٹرن کے، XML 1.0 میں لکھے ہی نہیں جا سکتے،  جیسے نمبر کی صورت میں بھی نہیں، اس لیے ہٹا دیے جاتے ہیں۔ کیریج ریٹرن لکھا جاتا ہے تاکہ پارسر اسے سنبھال کر رکھے۔ ایٹریبیوٹ کی قدروں میں واوین، ٹیب اور لائن بریک بھی حوالوں کی صورت لکھے جاتے ہیں، کیونکہ ورنہ پارسر انہیں خالی جگہ بنا دیتا۔
دہرائے گئے عناصر فہرست کی صرف ایک سطح دکھا سکتے ہیں۔ "m": [[1, 2], [3]] تین <m> عناصر بنتا ہے جن میں 1، 2 اور 3 ہیں، اور یہ بات ختم ہو جاتی ہے کہ 1 اور 2 ساتھ تھے۔ اوپر کی سطح کی فہرست بھی یہی کرتی ہے: [1, [3, 4]] سے تین <item> عناصر بنتے ہیں۔ اگر گروہ بندی اہم ہو تو پہلے ہر اندرونی فہرست کو ایک آبجیکٹ میں لپیٹیں: [{"values": [1, 2]}, {"values": [3]}] سے دو <item> عناصر بنتے ہیں، ہر ایک میں اپنا <values>۔
جو دستاویز /xml-to-json سے گزری ہو وہ انہی عناصر، ایٹریبیوٹس، نیم اسپیس سابقوں اور متن کے ساتھ لوٹتی ہے، اوپر کسی اضافی لفافے کے بغیر۔ جو JSON میں کبھی تھا ہی نہیں وہ واپس نہیں آتا: تبصرے اور DOCTYPE، ذیلی عناصر کے درمیان متن کی جگہ، اور مختلف ناموں والے عناصر کی باہمی ترتیب، جو نام کے حساب سے گروہوں میں لوٹتے ہیں۔ اگر /xml-to-json میں ٹائپ کی پہچان چالو تھی تو TRUE جیسی قدر true بن کر لوٹتی ہے؛ لفظ بہ لفظ واپسی کے لیے وہاں پہچان بند رکھیں۔
یہ صفحہ دوسری زبانوں میں: English · العربية · Deutsch · Français · Español · Русский · Português · 中文 · हिन्दी · Türkçe · עברית · فارسی · Bahasa Indonesia · বাংলা