محول XML إلى JSON
الصق XML على اليمين، احصل على JSON على اليسار. الخصائص محفوظة بالبادئة @_. بدون رفع ولا تسجيل.
- الصق XML في منطقة النص اليمنى.
- انقر «التحويل إلى JSON». يصبح تداخل العناصر كائنات متداخلة.
- انسخ JSON أو نزّله كـ data.json.
- العناصر الفرعية المتكررة تُلَفّ تلقائيًا في مصفوفات.
ماذا تفعل؟
يحلل XML إلى كائن JSON باستخدام اصطلاحات fast-xml-parser: تصبح العناصر الفرعية خصائص للكائن، وتصبح الفروع المتكررة مصفوفات، وتُحفَظ السمات بالبادئة `@_` على الكائن الأب، ويذهب المحتوى النصي للعقد المختلطة إلى مفتاح `#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.root` بدلًا من `result`.
هل تُحفَظ تعليقات XML؟
لا. لا توجد صياغة تعليقات في JSON، والمحلِّل مُعَد لتجاهل تعليقات XML. إن أردت الحفاظ عليها فستحتاج إلى تمثيل وسيط مختلف يدعمها.
هل تُكتَب قيم السمات بأنواع؟
نعم — `parseAttributeValue: true` مفعَّل، لذا يصبح `count="42"` `"@_count": 42` (رقم) و `enabled="true"` `"@_enabled": true` (بولين). إن احتجت السمات سلاسلَ نصية، عالج لاحقًا أو غيّر الإعداد.
هل يُرفَع XML الخاص بي؟
لا. يعمل كل شيء في متصفحك — يُحلَّل XML بـ JavaScript على هذه الصفحة ولا يُرسَل إلى أي خادم. تحقَّق في أدوات المطوّر بالمتصفح.
هل يمكنه التعامل مع ملفات XML كبيرة جدًا؟
حتى نحو 30 ميغابايت قبل أن تتباطأ منطقة النص. يتسع المحلِّل خطيًا. للمدخلات الأكبر شغّل fast-xml-parser من سطر الأوامر — نفس المكتبة.