XML سے JSON کنورٹر

بائیں طرف XML پیسٹ کریں، دائیں طرف JSON حاصل کریں۔ ایٹریبیوٹس @_ پریفکس کے ساتھ محفوظ۔ کوئی اپ لوڈ نہیں۔

  1. بائیں ٹیکسٹ ایریا میں XML پیسٹ کریں۔
  2. "JSON میں تبدیل کریں" پر کلک کریں۔ ایلیمنٹ نیسٹنگ نیسٹڈ آبجیکٹس بن جاتی ہے۔
  3. JSON کاپی کریں یا data.json کے طور پر ڈاؤن لوڈ کریں۔
  4. دہرائے جانے والے بچے ایلیمنٹس خود بخود ایرے میں جمع ہو جاتے ہیں۔
یہ کیا کرتا ہے؟

fast-xml-parser کنونشنز استعمال کرتے ہوئے XML کو JSON آبجیکٹ میں پارس کرتا ہے: بچے ایلیمنٹس آبجیکٹ پراپرٹیز بن جاتے ہیں، دہرائے جانے والے بچے ایرے بن جاتے ہیں، ایٹریبیوٹس پیرنٹ آبجیکٹ پر `@_` پریفکس کے ساتھ محفوظ ہوتے ہیں، اور مخلوط نوڈز کا ٹیکسٹ مواد `#text` کلید پر گرتا ہے۔ عددی اور بولین ایٹریبیوٹ ویلیوز `parseAttributeValue: true` کے ذریعے خود بخود ٹائپ ہوتی ہیں — ایک XML `count="42"` `"@_count": 42` کے طور پر راؤنڈ-ٹرپ ہوتا ہے، سٹرنگ `"42"` کے طور پر نہیں۔

مثال

XML ان پٹ:

<root version="1">
  <name>Ada</name>
  <tags>math</tags>
  <tags>logic</tags>
</root>

JSON آؤٹ پٹ:

{
  "root": {
    "@_version": 1,
    "name": "Ada",
    "tags": ["math", "logic"]
  }
}

عام XML خطرات اور انہیں کیسے سنبھالیں

XML کے پاس ایسے کونے کے کیسز ہیں جو JSON کے پاس نہیں ہیں۔ یہ پیٹرنز حیران کن آؤٹ پٹ پیدا کرتے ہیں۔

  • واحد بچہ بمقابلہ متعدد بچے۔ `<a><b/></a>` `{"a":{"b":""}}` (آبجیکٹ پراپرٹی کے طور پر واحد بچہ) پیدا کرتا ہے، لیکن `<a><b/><b/></a>` `{"a":{"b":["",""]}}` (ایرے کے طور پر متعدد) پیدا کرتا ہے۔ اگر آپ کا ڈاؤن سٹریم کوڈ ہمیشہ ایرے کی توقع رکھتا ہے، تبدیلی کے بعد نارملائز کریں۔
  • ایٹریبیوٹس بمقابلہ بچے ایلیمنٹس۔ ایٹریبیوٹس بچوں کی طرح اسی سطح پر `@_` پریفکس کے ساتھ ظاہر ہوتے ہیں۔ `<user id="1"><name>Ada</name></user>` `{"user":{"@_id":1,"name":"Ada"}}` بن جاتا ہے۔ کچھ ٹولز ایٹریبیوٹس کو پراپرٹیز میں ضم کرتے ہیں — یہ یہاں استعمال شدہ کنونشن سے مختلف کنونشن ہے۔
  • مخلوط مواد (ٹیکسٹ + بچے ایلیمنٹس)۔ `<p>Hello <b>world</b></p>` `{"p":{"#text":"Hello ","b":"world"}}` پیدا کرتا ہے۔ ٹیکسٹ پکڑا جاتا ہے لیکن بچوں کے سلسلے میں اس کی پوزیشن کھو جاتی ہے — JSON کے پاس ترتیب شدہ مخلوط مواد کی نمائندگی کرنے کا کوئی طریقہ نہیں۔ زیادہ تر کنفگ-سٹائل XML اس کیس میں نہیں آتا۔
  • نیم سپیسز۔ نیم سپیسز (`<x:foo xmlns:x="...">`) ایلیمنٹ نام (`x:foo`) کے حصے کے طور پر محفوظ ہیں۔ بہت سے XML صارفین پریفکس کو ہٹا دیتے ہیں؛ اگر آپ کو اس کی ضرورت ہو، اسے پوسٹ-پراسیسنگ مرحلے کے طور پر کریں۔
  • CDATA حصے۔ `<![CDATA[some text]]>` سادہ ٹیکسٹ کے طور پر پارس ہوتا ہے اور اپنے والدین کے `#text` میں شامل ہو جاتا ہے۔ CDATA فریمنگ کھو جاتی ہے — زیادہ تر کیسز کے لیے ٹھیک لیکن قابل ذکر اگر فریمنگ معنوی طور پر اہم تھی۔
  • سیلف-کلوزنگ بمقابلہ خالی۔ `<x/>` اور `<x></x>` XML میں مساوی ہیں اور ایک ہی JSON آؤٹ پٹ (ویلیو کے لیے `""`) پیدا کرتے ہیں۔ اصل فریمنگ JSON سے بازیافت نہیں کی جا سکتی۔
اکثر پوچھے جانے والے سوالات

میرے آؤٹ پٹ میں ایٹریبیوٹس پر `@_` پریفکس کیوں ہے؟

یہ XML ایٹریبیوٹس کو بچے ایلیمنٹس سے ممتاز کرتا ہے۔ پریفکس کے بغیر، `<user id="1"><id>foo</id></user>` کی دو `id` کلیدیں ہوں گی — ایک JSON آبجیکٹ صرف ایک رکھ سکتا ہے۔ پریفکس دونوں کو راؤنڈ-ٹرپ کے قابل رکھتا ہے۔ اگر آپ کو پریفکس کی ضرورت نہیں، پوسٹ-پراسیسنگ مرحلے میں `"@_"` کو `""` سے بدلیں (اور تصادم کا خطرہ قبول کریں)۔

کیا میں رپنگ روٹ کلید کے بغیر JSON حاصل کر سکتا ہوں؟

XML میں ہمیشہ ایک ہی روٹ ایلیمنٹ ہوتا ہے۔ JSON راؤنڈ-ٹرپ ایبلٹی کے لیے اس ریپنگ کو رکھتا ہے۔ اندرونی آبجیکٹ چاہیے تو تبدیلی کے بعد اسے ہٹا دیں — `result` کے بجائے `result.root`۔

کیا XML تبصرے محفوظ ہیں؟

نہیں۔ JSON میں کوئی تبصرہ سنٹیکس نہیں، اور پارسر کو XML تبصروں کو نظرانداز کرنے کے لیے کنفیگر کیا گیا ہے۔ اگر آپ کو تبصرے محفوظ کرنے کی ضرورت ہے، آپ کو ایک مختلف انٹرمیڈیٹ نمائندگی استعمال کرنی پڑے گی جو ان کی حمایت کرتی ہو۔

کیا ایٹریبیوٹ ویلیوز ٹائپ کی جاتی ہیں؟

جی ہاں — `parseAttributeValue: true` سیٹ ہے، لہذا `count="42"` `"@_count": 42` (نمبر) بنتا ہے اور `enabled="true"` `"@_enabled": true` (بولین) بنتا ہے۔ اگر آپ کو سٹرنگز کے طور پر ایٹریبیوٹس کی ضرورت ہو، پوسٹ-پراسیس کریں یا کنفیگریشن فورک کریں۔

کیا میرا XML اپ لوڈ ہوتا ہے؟

نہیں۔ سب کچھ آپ کے براؤزر میں چلتا ہے — آپ کا XML اس صفحے کے JavaScript کے ذریعے پارس ہوتا ہے اور کبھی کسی سرور کو نہیں بھیجا جاتا۔ براؤزر ڈویلپر ٹولز میں تصدیق کریں۔

کیا یہ بہت بڑی XML فائلیں سنبھال سکتا ہے؟

تقریباً 30 MB تک ٹیکسٹ ایریا کے سست ہونے سے پہلے۔ پارسر لکیری طور پر اسکیل کرتا ہے۔ بڑے ان پٹس کے لیے، کمانڈ لائن پر fast-xml-parser چلائیں — وہی لائبریری۔