تحويل XML إلى JSON
حوّل XML إلى JSON واختر بنفسك طريقة التعامل مع السمات وأقسام CDATA ومساحات الأسماء. وكل خطأ في الصياغة يحدد رقم سطره بدقة.
أفلت ملفاتك هنا
.xml, .rss, .svg, .xhtml, .txt · حتى 300 م.ب
إعدادات إضافيةإعدادات أقل
طريقة تحويل إلى JSON
- 1
إفلات ملف XML
أضف ملفًا واحدًا أو حتى 20 ملفًا. خلاصات RSS ورسومات SVG وصفحات XHTML كلها XML، وتُقرأ بالطريقة نفسها.
- 2
اختيار طريقة تحويل السمات والوسوم المكررة
يمكن أن تأخذ السمات بادئة، أو تُجمع تحت مفتاح واحد، أو تُستبعد. ويمكن أن تصير الوسوم المكررة مصفوفات دائمًا، أو فقط حين تتكرر فعلًا.
- 3
التحويل وتنزيل ملف JSON
انقر على الزر واحفظ النتيجة المنسقة بمسافات بادئة. والدفعة من عدة ملفات تصلك في أرشيف ZIP واحد.
عنصر واحد أم قائمة من عنصر واحد
أصعب ما في أي تحويل من XML إلى JSON هو القائمة التي فيها عنصر واحد. فالوسم <order> الذي يضم ثلاثة عناصر <item> يصير مصفوفة بلا شك، لكن المستند نفسه بعنصر واحد يبدو كائنًا عاديًا، والشيفرة التي تمر على عناصره في حلقة تتعطل مع أول عميل حقيقي. لهذا جاءت قاعدة المصفوفات إعدادًا صريحًا لا تخمينًا خفيًا، ولهذا يمكنك أن تفرض تحويل كل عنصر ابن إلى مصفوفة.
أرقام ليست أرقامًا
يحوّل التعرف التلقائي على الأنواع القيمة 42 إلى عدد، وtrue إلى قيمة منطقية، وهذا ما تريده في العادة، لكنه قد يكون كارثة أحيانًا. فرمز القطعة 00123 يجب ألا يصير 123، ورقم التعريف الضريبي المكون من 20 خانة يجب ألا يُقرَّب إلى الصيغة العلمية. لذلك تبقى القيم التي تبدأ بأصفار، وسلاسل الأرقام التي يزيد طولها على 15 حرفًا، سلاسل نصية. وإيقاف التعرف على الأنواع يُبقي كل قيمة كما كُتبت تمامًا.
تعريفات الكيانات مرفوضة
يُرفض أي DOCTYPE فيه تعريف <!ENTITY> قبل أن يبدأ التحليل. فعشرة كيانات متداخلة، يشير كل منها إلى سابقه عشر مرات، تتمدد إلى عدة غيغابايت من النص وتجمّد علامة التبويب، وهذا هو هجوم billion laughs الشهير. ولا يُوسَّع هنا شيء غير الكيانات الخمسة المعرّفة مسبقًا ومراجع الأحرف الرقمية، فلا يجد الهجوم ما يتمدد فيه.
التحليل هنا، لا في مكان آخر
يعمل المحلل في متصفحك، في خيط عامل منفصل (worker)، بشيفرة وصلت مع الصفحة. لا يُرفع ملف XML أبدًا، فلا نسخة على خادم تحتاج إلى حذف، ولا طابور انتظار، ولا سجلات تقلق بشأنها. وحين تُغلق علامة التبويب، يختفي المستند وملف JSON الذي بُني منه.
الأسئلة الشائعة
أين تذهب سمات XML في ملف JSON؟
افتراضيًا تصير كل سمة مفتاحًا في الكائن نفسه الذي يضم العناصر الأبناء، مع البادئة @_ حتى لا تتعارض مع وسم ابن يحمل الاسم نفسه. ويمكنك بدلًا من ذلك جمع كل السمات في كائن فرعي واحد @attributes، فيبقى محتوى العنصر نظيفًا، أو الاستغناء عن السمات تمامًا.
لماذا لا يتحول العنصر الوحيد إلى مصفوفة؟
لأنه لا شيء في المستند يدل على أنه قائمة. فبالقاعدة الافتراضية لا يصير الوسم مصفوفة إلا إذا ظهر فعلًا أكثر من مرة تحت العنصر الأب نفسه، وهذا يعكس الملف بدقة. وإذا كانت الشيفرة التي تستقبل JSON تحتاج إلى بنية ثابتة، فاضبط إعداد المصفوفات على «دائمًا»، فيصل حتى العنصر الابن الوحيد مصفوفة من عنصر واحد.
ماذا يحدث لأقسام CDATA؟
افتراضيًا يُدمج محتوى CDATA في نص العنصر، لأن CDATA مجرد أسلوب لاقتباس النص، لا نوع مستقل من البيانات. وإذا كنت تحتاج إلى معرفة الجزء من القيمة الذي كُتب بهذا الأسلوب، عند إعادة إخراج XML لاحقًا مثلًا، فاختر الفصل، فيوضع في مفتاح #cdata خاص به.
هل يمكنني إزالة بادئات مساحات الأسماء؟
نعم. حذف مساحات الأسماء يحوّل dc:title إلى title، فيصير الوصول إلى صيغ الخلاصات والمستندات في الشيفرة أسهل بكثير. واترك هذا الخيار متوقفًا إذا كانت مساحتا أسماء مختلفتان تستخدمان الاسم المحلي نفسه في الملف نفسه، لأن البادئة حينها هي الشيء الوحيد الذي يفرّق بين المفاتيح.
لماذا يظهر لي خطأ بشأن الكيانات المخصصة؟
لأن المستند الذي يعرّف كياناته الخاصة في DOCTYPE يُرفض بدل أن تُوسَّع كياناته. وهذا هو الدفاع الوحيد الموثوق ضد قنابل توسيع الكيانات، التي يمكن أن تحوّل بضعة كيلوبايت إلى عدة غيغابايت من الذاكرة. احذف كتلة DOCTYPE، فيتحول باقي المستند بشكل طبيعي.
هل تعمل الأداة مع خلاصات RSS وملفات SVG؟
نعم، فكلاهما XML عادي. تتحول خلاصة RSS إلى كائن فيه البيانات الوصفية للقناة ومصفوفة من العناصر، وهي بنية مريحة للعمل. ويتحول ملف SVG إلى شجرة عناصره مع بقاء كل سمات العرض كما هي، وهذا مفيد لفحص الرسومات أو إعادة كتابتها برمجيًا.
ماذا يحدث إذا كان في XML خطأ في الصياغة؟
تحصل على رقم السطر والعمود والوسم المعني، مثل «وسم إغلاق متوقع في السطر 214، العمود 5»، بدل رسالة مجردة بأن التحليل فشل. وفي ملف فيه عشرات الآلاف من العناصر، هذا الفرق هو المقصود كله، لأنه يخبرك أين تبحث.
هل يُرفع ملفي إلى أي مكان؟
لا. فك الترميز والتحقق والتحويل، كلها تجري محليًا في علامة التبويب في متصفحك. لا يشارك أي خادم في أي مرحلة، فلا تبقى نسخة من مستندك في أي مكان بعد إغلاق الصفحة.