الأدوات
الأدلة

محوّل JSON ↔ XML

JSON

تحويل بين JSON و XML. يتم تغليف الكائنات المتداخلة تحت عنصر جذر قابل للضبط.

100% من جهة العميل بدون خادم خلفي
الإدخال
الإخراج
في هذه الصفحة

ما هو محوّل JSON ↔ XML؟#

JSON و XML طريقتان مختلفتان لكتابة البيانات المهيكلة، وليسا قابلين للتبديل على مستوى البنية — أحدهما يستخدم الأقواس والمعقوفتين، والآخر يستخدم وسومًا ذات أقواس زاوية. المُحوِّل بينهما لا “يضغط” أو “يرمّز”؛ بل يُعيد التعبير عن نفس شجرة القيم بالتدوين الآخر، فيستطيع نظام لا يتقن سوى XML استهلاك بيانات وصلت كـ JSON، والعكس صحيح.

التطابق آلي في معظمه لكن له حافتين خشنتين معروفتين. أولًا، يتطلب XML عنصر جذر واحد تمامًا يلتف حول كل شيء، بينما يسمح JSON بسعادة بأن يكون المستوى الأعلى كائنًا أو مصفوفة مجردة — فالانتقال من JSON إلى XML يعني دائمًا اختيار اسم لذلك الغلاف الخارجي. ثانيًا، يمكن أن تحمل عناصر XML سمات (<a id="7">)، وليس لـ JSON ما يكافئها أصليًا؛ والاتفاق الشائع إيداعها تحت مفاتيح مسبوقة بـ @، وأي نص يعيش جنبًا إلى جنب مع السمات تحت مفتاح #text.

تُحوِّل هذه الصفحة في كلا الاتجاهين داخل المتصفح: من JSON إلى XML (بتغليف قيمتك تحت عنصر جذر تسمّيه أنت)، ومن XML إلى JSON (بفكّ السمات إلى مفاتيح @، ومثلًا تجريد الجذر الخارجي افتراضيًا لتستعيد القيمة الداخلية).

كيفية الاستخدام#

  1. اختر الاتجاه عبر مفتاح JSON → XML / XML → JSON أعلى يسار شريط الأدوات.
  2. اكتب أو الصق في لوحة الإدخال على اليسار.
    • JSON → XML يتوقع JSON صالحًا. أي قيمة ذات مستوى أعلى تُغلَّف تحت عنصر الجذر.
    • XML → JSON يتوقع مستند XML جيد التكوين. يُفكّ العنصر الخارجي المفرد تلقائيًا، فتحصل على محتواه الداخلي كـ JSON.
  3. في وضع JSON → XML، اضبط حقل العنصر الجذر (الافتراضي root) لتسمية وسم الغلاف — مثلًا user أو feed أو response. يفرض XML جذرًا واحدًا، فهذا الاسم مطلوب دائمًا.
  4. تظهر النتيجة حيًّا في لوحة الإخراج. انقر نسخ لأخذها.
  5. يحمِّل مثال مستندًا صغيرًا يناسب الاتجاه الحالي؛ ويعيد مسح ضبط اللوحتين.

الميزات الرئيسية#

  • كلا الاتجاهين في أداة واحدة. مفتاح واحد يقلب بين JSON-إلى-XML و XML-إلى-JSON، مع إعادة توجيه لوحة الإدخال تلقائيًا.
  • عنصر جذر قابل للضبط. لأن XML لا يمكن أن يوجد بدون عنصر خارجي واحد، فأنت تسمّي الغلاف؛ ويتولّى المُحوِّل التغليف لأي شكل أعلى JSON.
  • إعلان XML سليم. يبدل إخراج JSON-إلى-XML بالتمهيد القياسي <?xml version="1.0" encoding="UTF-8"?> ويُنسَّق للطباعة الجميلة بمسافتين إزاحة.
  • تطابق السمات ذهابًا وإيابًا. يحافظ XML-إلى-JSON على سمات العناصر تحت مفاتيح مسبوقة بـ @، ويُحفظ النص المجاور للسمات تحت #text، فلا شيء يُسقط بصمت.
  • تحليل يدرك الأرقام. XML كله نص؛ يُكره المحلّل قيم العناصر ذات المظهر الرقمي إلى أرقام JSON (فيصير <age>36</age> هو 36، لا "36").

مثال عملي#

JSON → XML#

مع ضبط الاتجاه على JSON → XML وتسمية الجذر root، حمِّل مثال:

{
  "name": "Ada",
  "age": 36,
  "skills": ["math", "logic"]
}

يُغلِّف المُحوِّل كل شيء تحت <root> ويوسّع المصفوفة كما يحتاج XML — كل عنصر يصير وسمه الخاص بالاسم نفسه:

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <name>Ada</name>
  <age>36</age>
  <skills>math</skills>
  <skills>logic</skills>
</root>

غيِّر حقل العنصر الجذر إلى person فيصير الغلاف <person> / </person> بدلًا منه — والبنية الداخلية لا تُمَس.

XML → JSON#

بدِّل إلى XML → JSON وحمِّل مثال:

<?xml version="1.0"?>
<root><name>Ada</name><age>36</age></root>

يُتجرد <root> الخارجي، وتصير العناصر الداخلية خصائص JSON، مع التعرّف على 36 كرقم:

{
  "name": "Ada",
  "age": 36
}

تُحفظ السمات أيضًا. عنصر مثل <a id="7">label</a> يُنتج { "@id": "7", "#text": "label" } — تعيش السمة تحت @id، والنص تحت #text، ولا يُفقد منهما شيء.

الأسئلة الشائعة#

لماذا تتحول مصفوفتي في JSON إلى عناصر XML مكررة بدلًا من غلاف واحد يحتوي العناصر؟#

هكذا يمثّل XML قائمة: لا يوجد بناء “مصفوفة”، فيتعين على كل عنصر أن يكون وسمه الخاص بنفس اسم الوسم. لذا فمصفوفة JSON ["math", "logic"] تحت المفتاح skills تصير عنصرَي <skills> شقيقين، لا عنصر <skills> واحد يحوي أبناء. هذا هو التطابق القياسي الصديق للمخططات — يتوقعه مستهلكو XML.

في XML → JSON، أين ذهب عنصري الخارجي؟#

يُفكّ المُحوِّل الجذر المفرد تلقائيًا. يفرض XML عنصر مستوى أعلى واحد تمامًا، لكن في JSON يكون ذلك الغلاف عادةً زائدًا — <root><name>Ada</name></root> لا يحمل في root أي معلومة تحتاجها JSON. تجريده يمنحك القيمة الداخلية ذات المعنى مباشرةً. إن احتجت الجذر فعلًا، أبقِه عنصرًا عاديًا واصله بالاسم.

لماذا 36 رقم في المخرجات لا سلسلة؟#

ليس لـ XML نوع أرقام منفصل — كل شيء بين الوسوم نص. يطبّق المحلّل إكراهًا عدديًّا، فالعنصر الذي يبدو نصه رقمًا (36، 3.14) يعود رقم JSON. هذا مريح للبيانات النموذجية، لكنه يعني أيضًا أن قيمة مثل رمز منتج <code>007</code> ستفقد أصفارها البادئة — خزّن هذه القيم كسمات أو اقبلها كسلاسل.

هل يستطيع تحويل أي مستند XML؟#

XML جيد التكوين نعم، بما في ذلك فضاءات الأسماء في الوسوم، والسمات، والعناصر ذاتية الإغلاق، والإعلانات. لا يحلّل DTD، ولا يتحقق مقابل مخطط، ولا يجلب كيانات خارجية — المعالجة محلية نصية فقط، مما يعني أيضًا أنها آمنة للصق مستندات لا تثق بها تمامًا.