§

ان پٹ

موڈ
§

آؤٹ پٹ

Pakistan اور UK کی ٹیمیں XML اور JSON کے درمیان روز پل بناتی ہیں، عام طور پر اس لیے کہ stack کے دو حصے ایک فارمیٹ پر متفق نہیں۔ NHS Digital GP Connect کے لیے FHIR XML اور NHS login کے لیے FHIR JSON لازمی قرار دیتا ہے۔ JPMorgan اور Bank of America جیسے بینکوں کی SOAP services ابھی بھی XML envelopes لوٹاتی ہیں جنہیں React front-ends JSON کے طور پر چاہتی ہیں۔ ڈیٹا کی طرف، AWS SNS اور SQS bodies، USPS shipping manifests اور کمپنی فائلنگز XML میں آتی ہیں جسے engineers Snowflake یا BigQuery میں land کرنے سے پہلے JSON میں reshape کرتے ہیں۔ ہر صورت میں حل ایک ہی ہے: ایک تیز، مقامی کنورٹر جسے آپ fresh payload پر کہیں بھیجے بغیر دوبارہ چلا سکتے ہیں۔

XML ↔ JSON تبدیلی کیا ہے؟

XML (Extensible Markup Language) hierarchical ڈیٹا کے لیے tag-based text format ہے۔ آپ اسے SOAP web services، RSS اور Atom feeds، HL7 FHIR health records، sitemap.xml files، اور Maven، Spring اور Android Gradle کے ساتھ ship ہونے والی configuration files میں دیکھتے ہیں۔ JSON (JavaScript Object Notation، RFC 8259 سے تعریف) اسی قسم کے نیسٹڈ ڈیٹا کو بیان کرتا ہے، لیکن opening اور closing tags کی بجائے braces اور arrays کے ساتھ۔ JSON آج تقریباً ہر REST API بولتی ہے، اور یہ ہر browser runtime کی native value shape ہے۔ دو فارمیٹس کے درمیان تبدیلی ایک سادہ کام لگتی ہے جب تک آپ attributes، mixed content، repeated children اور CDATA سے نہ ٹکراؤ۔ ایک custom regex غلط جواب ہے؛ ایک real parser درست جواب ہے۔ یہ ٹول ایک real parser (fast-xml-parser) ship کرتا ہے اور اسے آپ کے براؤزر میں چلاتا ہے، اس لیے آپ ایک legacy SOAP service کا لوٹایا XML envelope paste کر سکتے ہیں اور اسے JSON object بنتے دیکھ سکتے ہیں جسے آپ براہ راست Redux store میں ڈال سکتے ہیں، یا ایک JSON payload XML shape میں واپس بدل سکتے ہیں جو ایک enterprise endpoint ابھی بھی expect کرتا ہے۔

XML ↔ JSON mapping کیسے کام کرتی ہے؟

ہر تبدیلی آپ کے براؤزر میں bundled fast-xml-parser library (MIT، version 4.x) کا استعمال کر کے مقامی طور پر چلتی ہے۔ اعلیٰ سطحی mapping rules یہ ہیں:

  1. Element سے key: ہر XML element نام ایک JSON object key بنتا ہے۔ <user><name>Alice</name></user> {"user":{"name":"Alice"}} میں map ہوتا ہے۔
  2. Attribute سے prefixed key: ایک attribute کو منتخب prefix سے شروع ہونے والی key کے تحت store کیا جاتا ہے۔ prefix @ کے ساتھ، <user id="1"> {"user":{"@id":"1"}} پیدا کرتا ہے۔
  3. Text content سے text-node key: جب کسی element میں attributes اور text دونوں ہوں، text منتخب text-node key کے تحت آتا ہے۔ <price currency="USD">9.99</price> key #text کے ساتھ {"price":{"@currency":"USD","#text":"9.99"}} پیدا کرتا ہے۔
  4. Repeated children سے array: جب دہرائے گئے child tags کے لیے array مجبور آن ہو، ایک ہی نام والے متعدد sibling elements ایک JSON array میں collapse ہو جاتے ہیں۔ <items><item>A</item><item>B</item></items> {"items":{"item":["A","B"]}} بن جاتا ہے۔
  5. CDATA sections: <![CDATA[…]]> کے اندر raw text #cdata key کے تحت محفوظ رہتا ہے تاکہ round-trip کے دوران angle brackets اور ampersands دوبارہ escape نہ ہوں۔
  6. JSON سے XML mapping کو پلٹتا ہے: object keys elements بنتے ہیں، prefixed keys attributes بنتے ہیں، اور arrays repeated sibling elements میں پھیل جاتی ہیں۔

اس ٹول سے XML اور JSON کیوں تبدیل کریں؟

  • آپ کا ڈیٹا آپ کی مشین پر رہتا ہے۔ ہر parse اور ہر build اس صفحے کے JavaScript context میں چلتا ہے۔ FHIR patient bundles، SOAP authentication envelopes، proprietary config files، billing exports — کوئی بھی ہمارے servers کو نہیں چھوتا، کیونکہ code path میں کوئی upload قدم ہی نہیں ہے۔ network panel کھولیں اور دیکھیں۔
  • Legacy SOAP کو REST-first front end میں لانا سب سے عام مانگ ہے۔ ایک بینک یا insurer SOAP endpoint expose کرتا ہے جو سالوں بند نہیں ہوگا؛ اسے call کرنے والی React یا Vue app XML نہیں سیکھنا چاہتی۔ envelope paste کریں، attributes prefixed اور namespaces محفوظ کے ساتھ JSON واپس لیں، Body contents اپنے state store میں ڈالیں۔
  • RSS، Atom اور sitemap consumers بھی فائدہ اٹھاتے ہیں۔ ایک podcast directory، news aggregator، یا internal dashboard جو sitemap.xml ingest کرتا ہے، XML parser لکھنا مکمل طور پر چھوڑ سکتا ہے۔ feed ایک بار تبدیل کریں، JSON array سے کام کریں، اور آپ کا client code اس زبان میں رہتا ہے جو وہ پہلے سے بولتا ہے۔
  • Configuration export فہرست مکمل کرتا ہے۔ Maven، Spring، Android Gradle اور پرانے Ant builds سبھی XML emit کرتے ہیں؛ دوسرے سرے پر cloud-native tooling (Terraform، Ansible، GitHub Actions، cloud-init) JSON یا YAML پڑھتا ہے۔ Python script کی بجائے براؤزر میں تبدیل کریں، خاص طور پر air-gapped ماحول میں جہاں کسی نامعلوم web service میں paste کرنا قابلِ قبول نہیں۔

XML ↔ JSON تبدیلی کے عام استعمالات کیا ہیں؟

XML اور JSON کے درمیان پل بنانا integration engineering، API tooling اور data engineering میں ظاہر ہوتا ہے۔ چند patterns کام کا بوجھ غالب کرتے ہیں:

  • SOAP سے REST bridging: legacy banking یا insurance API کے لوٹائے SOAP envelope سے Body payload نکالنا اور اسے JSON میں بدلنا تاکہ React یا Vue front-end اسے server-side proxy layer کے بغیر consume کر سکے۔
  • FHIR health records: HL7 FHIR XML bundles (HHS/ONC اور NHS Digital کی کلینکل ڈیٹا exchange کے لیے مطلوبہ فارمیٹ) کو JSON میں تبدیل کرنا MongoDB Atlas collection یا PostgreSQL JSONB column میں لوڈ کرنے کے لیے جہاں analysts query کر سکیں۔
  • Sitemap اور feed processing: sitemap.xml یا RSS/Atom feed کو JSON array میں بدلنا تاکہ ایک custom indexer، Slack bot، یا dashboard widget entries پر iterate کر سکے بغیر XML parser کو dependency کے طور پر لائے۔

XML ↔ JSON round-trip کیسا دکھتا ہے؟

ایک چھوٹی مثال لیں۔ <user id="1"><name>Alice</name></user> input میں paste کریں، attribute prefix کو @ پر سیٹ کریں، موڈ XML سے JSON پر رکھیں، اور Convert دبائیں۔ آؤٹ پٹ {"user":{"@id":"1","name":"Alice"}} ہے۔ موڈ JSON سے XML پر پلٹیں، وہ JSON واپس paste کریں، indent کو 2 spaces پر سیٹ کریں، اور دوبارہ Convert دبائیں۔ آپ کو <user id="1">\n <name>Alice</name>\n</user> ملے گا، اصل کے structurally یکساں۔ round-trip میں صرف ایک چیز guarantee نہیں ہے وہ attribute order ہے، کیونکہ JSON object keys spec کے مطابق بے ترتیب ہیں۔

یہ XML ↔ JSON کنورٹر fast-xml-parser@4 کو اسی origin پر bundled ship کرتا ہے، attributes، CDATA، repeated child tags اور namespace prefixes سنبھالتا ہے، اور page لوڈ ہونے کے بعد offline کام کرتا رہتا ہے۔ کوئی upload قدم نہیں، کوئی CDN proxy نہیں، کوئی analytics beacon نہیں، کوئی telemetry نہیں۔ input اور آؤٹ پٹ کا ہر byte آپ کے براؤزر میں رہتا ہے، جو ٹھیک وہی ہے جو آپ چاہتے ہیں جب payload FHIR patient bundle، SOAP authentication envelope، یا ڈیٹا کی کوئی بھی ایسی شکل ہو جسے آپ کی team کے باہر کوئی نہیں دیکھنا چاہیے۔