طريقة الاستخدام
- الصق JSON في JSON. يصبح عضوه الواحد في المستوى الأعلى هو العنصر الجذري.
- استخدم البادئة @ للسمات، مثل @id، و#text لنص العنصر.
- اختر الإزاحة، أو بلا أسطر جديدة (مضغوط) لأقصر XML.
- انسخ XML، أو نزّله ملفاً باسم converted.xml.
التوافق، قاعدة بقاعدة
لـ XML عناصر وسمات، ولـ JSON كائنات ومصفوفات وقيم. ويربط التوافق بينها في اتجاه واحد. المستوى الأعلى كائن فيه عضو واحد: اسمه هو العنصر الجذري. ويصبح الكائن عنصراً. والعضو الذي يبدأ اسمه بـ @ يصبح سمة، والعضو المسمى #text يصبح نص العنصر. وأي عضو آخر يصبح عنصراً فرعياً بذلك الاسم.
تعطي المصفوفة عنصراً فرعياً لكل عنصر فيها، كلها باسم المصفوفة، فتُكتب قائمة الكتب عناصر book متكررة. والنص أو الرقم أو true وfalse يصبح نصاً. أما null والكائن الفارغ فيصبحان عنصراً فارغاً. والمصفوفة الفارغة ليس لها شكل في XML، فتُحذف.
- يجب أن يكون الاسم اسم XML صالحاً: المفتاح مثل first name، فيه مسافة، لا يصلح اسم عنصر.
- المصفوفة داخل مصفوفة مرفوضة، لأنه لا يوجد اسم عنصر يُعطى لعناصرها.
- يُكتب نص الرقم كما تكتبه JavaScript، فالعدد الذي فيه أكثر من 15 أو 16 رقماً معنوياً قد يفقد أرقاماً، كما يحدث في قراءة JSON.
ما الذي لا يستطيع التوافق حفظه
ليس لـ XML أنواع، لذلك يضيع الفرق بين الرقم 12 والنص ”12“ عند العودة؛ ويقرأ محوّل XML إلى JSON النص الذي يشبه الرقم كرقم، إلا إذا أُوقف ذلك. ويبدو الكائن الفارغ وnull متشابهين في XML، ومصفوفة فيها عنصر واحد تعود كذلك العنصر نفسه. هذه حدود التوافق، لا أخطاء في الأداة.
لا تُكتب التعليقات وتعليمات المعالجة، لأن JSON لا يملك مكاناً لحفظها. ويُهرَّب النص داخل العنصر، فتبقى &، و< و> نصاً في XML.
مثال محلول: الكتالوج الافتراضي
يحمل JSON الافتراضي عضواً واحداً هو catalog. تصبح سمته @version هي سمة version في عنصر catalog، وتصبح مصفوفة book عنصري book. ويأخذ كل كتاب سمته @id باسم id، وتصبح مفاتيحه title وprice وinStock عناصر فرعية. ويصبح price القيمة null في الكتاب الثاني العنصر الفارغ price.
مع مسافتين والإعلان، يكون الخرج ثمانية عناصر: الكتالوج، وكتابان، وثلاثة عناصر فرعية للكتاب الأول، واثنان للكتاب الثاني. ويظهر العدد 8.
الأسئلة الشائعة
كيف أكتب سمة في JSON؟
أعطِ المفتاح البادئة @. فالعضو "@id": "1" يصبح id="1" في العنصر الذي يحمله. ويجب أن تكون قيم السمات نصاً أو أرقاماً أو true أو false، لا كائنات ولا مصفوفات.
لماذا تصبح مصفوفتي عدة عناصر بالاسم نفسه؟
لا توجد مصفوفات في XML. يصبح كل عنصر في المصفوفة عنصراً واحداً باسم المصفوفة، بالترتيب نفسه، وهذه الطريقة المعتادة في XML لقوائم متكررة مثل الكتب أو العناصر.
لماذا أحصل على خطأ عن المستوى الأعلى؟
يحتاج XML إلى عنصر جذري واحد بالضبط. لذلك يجب أن يكون JSON كائناً واحداً فيه عضو واحد، مثل {"catalog": {...}}، فلا تشكّل قائمة أو عدة أعضاء في المستوى الأعلى مستنداً واحداً.
لماذا يُرفض مفتاح فيه مسافة؟
لا يمكن أن تحتوي أسماء العناصر في XML على مسافات. أعد تسمية المفتاح، مثلاً إلى first-name أو firstName، قبل التحويل.
هل يُرسل JSON الخاص بي إلى خادم؟
لا. يعمل التحويل في متصفحك. ولا يُرسل ما تلصقه إلى خادمنا، ولا يُخزَّن هناك.
المصادر
- RFC 8259 (باللغة الإنجليزية): The JavaScript Object Notation (JSON) Data Interchange Format
- W3C (باللغة الإنجليزية): Extensible Markup Language (XML) 1.0, Fifth Edition
آخر مراجعة للأرقام والنص: الثلاثاء، 30 جمادى الأولى 1448 بعد الهجرة.