Skip to content

محوّل XML إلى JSON

الصق XML واحصل على JSON فوراً. يحوّل السمات إلى مفاتيح بادئة @_، ويتعامل مع العناصر المكررة كمصفوفات. 100% في المتصفح، دون رفع أي بيانات ودون تسجيل.

بدون تتبّع يعمل في المتصفّح مجاني
الخيارات · مسافتان · <bdi>XML</bdi> → <bdi>JSON</bdi>
المسافة البادئة
0 حرف
JSON الإخراج
0 سطر
Reviewed for XML 1.0 well-formedness handling, @_/#text convention correctness, and string-preservation accuracy — Go Tools Engineering Team · May 29, 2026

ما هو تحويل XML إلى JSON وكيف يعمل؟

XML (لغة الترميز القابلة للتوسع) وJSON (تدوين كائنات JavaScript) كلاهما تنسيقا بيانات منظَّمة، لكن لهما نماذج مختلفة جوهرياً: XML شجرة من العناصر ذات سمات ومحتوى مختلط (نص متشابك مع عناصر فرعية)؛ JSON شجرة من الكائنات والمصفوفات والسلاسل النصية والأرقام والقيم المنطقية وقيم null. يتطلب التحويل بينهما مجموعة اتفاقيات لسد الفجوة.

تستخدم هذه الأداة الاتفاقية الأكثر انتشاراً، وهي الاتفاقية نفسها المستخدمة في مكتبات مشهورة مثل fast-xml-parser (Node.js) وxmltodict (Python) وJAXB (Java):

**1. السمات → بادئة @_.** سمات XML لا يوجد لها ما يقابلها مباشرةً في JSON. الاتفاقية هي تمثيلها كمفاتيح مسبوقة بـ @_. فتصبح هي { "@_id": "42", "@_role": "admin" } داخل كائن user. هذه البادئة لا لبس فيها: لا يبدأ أي اسم عنصر XML صالح بـ @، لذا لا يوجد تعارض مع أسماء العناصر الفرعية.

**2. محتوى نص العنصر ذي السمات → #text.** عندما يحتوي عنصر على سمات ومحتوى نص — مثل 29.99 — يجب أن يشارك النص كائن JSON نفسه مع السمات. الاتفاقية هي تخزينه تحت المفتاح #text، مما يُنتج { "@_currency": "USD", "#text": "29.99" }. العناصر ذات محتوى النص فحسب دون سمات تتحول إلى قيمة سلسلة نصية عادية.

**3. العناصر المتجاورة المكررة → مصفوفات.** يسمح XML بعناصر فرعية متعددة بالاسم نفسه؛ كائنات JSON لا يمكنها امتلاك مفاتيح مكررة. الحل هو تجميع العناصر المتجاورة بالاسم نفسه في مصفوفة. عنصر واحد يصبح كائناً واحداً؛ عنصران أو أكثر من يصبحان مصفوفة من الكائنات. هذه أهم التفاصيل السلوكية لفهمها: يتغير شكل JSON بناءً على عدد العناصر المتجاورة في XML.

**4. بدون إكراه للأنواع — تبقى جميع القيم سلاسل نصية.** XML لا يمتلك نظام أنواع أصلياً لمحتوى النص. القيمة «123» في XML سلسلة نصية. تحويلها إلى الرقم 123 في JSON يتطلب افتراضاً بشأن نية المؤلف — افتراض خاطئ للرموز البريدية («01234» → 1234) وأرقام الهواتف والمعرّفات ذات الحشو والسلاسل العشرية الحساسة للدقة. تحافظ هذه الأداة على جميع القيم كسلاسل نصية. طبّق إكراه الأنواع في الكود الخاص بك للحقول التي تعرف فيها النوع.

**5. خسارة للتعليقات وتعليمات المعالجة ومساحات الأسماء.** يدعم XML ميزات لا تدعمها JSON: التعليقات () وتعليمات المعالجة () ودلالات مساحات الأسماء. هذه تُستبعَد أو تُقرَّب أثناء التحويل. لعمل XML بلا خسارة — إعادة تنسيق أو ضغط أو تحقق — استخدم منسّق XML بدلاً من ذلك. للتحويل العكسي — بناء XML من JSON — استخدم محوّل JSON إلى XML.

**لماذا تحويل XML إلى JSON أصلاً؟** JSON هو التنسيق الأصلي لـ JavaScript والتنسيق الافتراضي لتبادل البيانات في واجهات REST البرمجية. إذا كنت تستقبل XML من خدمة SOAP قديمة أو تغذية RSS أو خريطة موقع أو نظام مؤسسي، فإن تحويله إلى JSON يتيح لك العمل مع البيانات باستخدام وصول كائنات JavaScript القياسية واستعلامات JSON path وأي قاعدة بيانات أو واجهة برمجية مدركة لـ JSON.

// Convert XML to JSON in Node.js using fast-xml-parser
import { XMLParser } from 'fast-xml-parser';

const xml = `<catalog>
  <product id="P01">
    <name>Wireless Headphones</name>
    <price currency="USD">79.99</price>
  </product>
</catalog>`;

const parser = new XMLParser({
  ignoreAttributes: false,      // preserve attributes
  attributeNamePrefix: '@_',    // @_ prefix for attributes
  textNodeName: '#text',        // #text for mixed element content
  parseAttributeValue: false,   // no type coercion on attributes
  parseTagValue: false,         // no type coercion on element text
});

const result = parser.parse(xml);
console.log(JSON.stringify(result, null, 2));
// {
//   "catalog": {
//     "product": {
//       "@_id": "P01",
//       "name": "Wireless Headphones",
//       "price": {
//         "@_currency": "USD",
//         "#text": "79.99"
//       }
//     }
//   }
// }

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

تحويل مباشر

يتحدث إخراج JSON فوراً أثناء الكتابة أو لصق XML — دون الحاجة إلى زر «تحويل». تتحول المدخلات الكبيرة (أكثر من 200 كيلوبايت) تلقائياً إلى الوضع اليدوي للحفاظ على استجابة المتصفح.

اتفاقية البادئة @_ للسمات

تصبح سمات XML مفاتيح JSON مسبوقة بـ @_، اتباعاً لاتفاقية fast-xml-parser وxmltodict. تصبح { "@_attr": "val" } — واضحة ولا تعارض مع أي اسم عنصر صالح.

اكتشاف تلقائي للمصفوفات للعناصر المكررة

تصبح العناصر المتجاورة بالاسم نفسه تلقائياً مصفوفة JSON. عنصر واحد → كائن؛ عنصران أو أكثر من → مصفوفة. لا حاجة لأي إعداد — تكتشف الأداة التكرارات تلقائياً.

بدون إكراه للأنواع — تبقى القيم سلاسل نصية

تُحفظ جميع قيم XML كسلاسل نصية JSON. الأصفار الأمامية وأرقام الهواتف والأكواد ذات الحشو والسلاسل المنطقية الشكل مثل «true» أو «false» لا تتحول أبداً بصمت إلى أرقام أو قيم منطقية.

خصوصية 100% قائمة على المتصفح

يتم التحويل كلياً محلياً في متصفحك باستخدام JavaScript. XML الخاص بك — بما في ذلك بيانات الاعتماد والإعدادات الداخلية والحمولات الحساسة — لا يُرسَل إلى أي خادم ولا يُسجَّل ولا يُخزَّن أبداً.

الإبلاغ عن أخطاء الصياغة السليمة

إذا لم يكن XML مُصاغاً بشكل سليم، تُبلّغ الأداة عن رقم السطر والعمود بالضبط للخطأ الأول، حتى تتمكن من تحديد المشكلة وإصلاحها فوراً قبل التحويل.

أمثلة

ملف إعداد

<?xml version="1.0" encoding="UTF-8"?>
<appConfig version="2.1" env="production">
  <database>
    <host>db.example.com</host>
    <port>5432</port>
    <name>myapp_prod</name>
    <pool max="10" min="2"/>
  </database>
  <cache enabled="true">
    <ttl>3600</ttl>
    <driver>redis</driver>
  </cache>
</appConfig>

ملف إعداد تطبيق صغير يحتوي على سمات وعناصر متداخلة. تصبح السمات مفاتيح بادئة @_ في إخراج JSON: يصبح version="2.1" هو "@_version": "2.1" تحت appConfig، وتصبح سمتا max وmin للعنصر pool هما "@_max": "10" و"@_min": "2". جميع القيم — بما فيها port وttl — تبقى سلاسل نصية لا أرقاماً، لأن المحوّل لا يُجري أي إكراه للأنواع.

مقتطف خريطة موقع

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://go-tools.org/tools/xml-to-json</loc>
    <lastmod>2026-05-29</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://go-tools.org/tools/json-to-xml</loc>
    <lastmod>2026-05-29</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
  </url>
</urlset>

مقتطف ملف sitemap.xml بعنوانَي URL. لأن هناك عنصرَي <url> متجاورَين تحت <urlset>، يصبحان مصفوفة JSON. يصبح إعلان مساحة الأسماء xmlns هو "@_xmlns" على كائن urlset. تبقى قيمة priority «0.8» سلسلة نصية — دون إكراه رقمي — لذا ستُحفظ القيم ذات الصفر الأمامي مثل «0.08» بدقة أيضاً.

عنصر RSS

<item>
  <title>XML to JSON: A Practical Guide</title>
  <link>https://go-tools.org/blog/xml-to-json-guide</link>
  <pubDate>Thu, 29 May 2026 00:00:00 GMT</pubDate>
  <category>Developer Tools</category>
  <description>Learn how XML attributes map to @_ keys, how repeated elements become arrays, and why values stay strings in any XML-to-JSON conversion.</description>
  <guid isPermaLink="true">https://go-tools.org/blog/xml-to-json-guide</guid>
</item>

عنصر RSS 2.0. يحتوي عنصر guid على سمة isPermaLink، لذا يصبح إخراج JSON لـ guid كائناً يحتوي على "@_isPermaLink": "true" و"#text": "https://go-tools.org/blog/xml-to-json-guide" — تتعايش السمة ومحتوى نص العنصر كمفاتيح متجاورة. جميع العناصر الأخرى تحتوي على محتوى نصي فحسب وتتحول مباشرةً إلى قيم سلسلة نصية.

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

  1. 1

    الصق XML الخاص بك

    أدخل أو الصق XML في حقل الإدخال أعلاه. يمكنك أيضاً النقر على «تحميل مثال» لتجربة عينة — ملف إعداد أو مقتطف خريطة موقع أو عنصر RSS.

  2. 2

    شاهد إخراج JSON مباشرة

    يظهر JSON فوراً في لوحة الإخراج. تصبح السمات مفاتيح مسبوقة بـ @_، ومحتوى نص العناصر المختلطة يصبح #text، والعناصر المتجاورة المكررة تصبح مصفوفات. اضبط المسافة البادئة (مسافتان أو 4) حسب الحاجة.

  3. 3

    انسخ أو حمّل

    انقر على «نسخ» لنقل JSON إلى الحافظة، أو «تحميل» لحفظه كملف .json جاهز لتطبيقك أو واجهة برمجية أو مسار البيانات.

مزالق التحويل الشائعة

نسيان أن القيم تبقى سلاسل نصية

لا يُجري المحوّل أي إكراه للأنواع. إذا كان كود المصب يتوقع أرقاماً في JSON لكن XML يحتوي على سلاسل رقمية، يجب عليك إكراهها صراحةً بعد التحويل. الاعتماد على إكراه السلسلة إلى رقم ضمنياً (عملية == في JavaScript أو عمليات الحساب) عرضة للأخطاء — استخدم دائماً parseInt() أو parseFloat() أو Number() بشكل متعمد.

✗ خطأ
// XML: <timeout>30</timeout>
// JSON output: { "timeout": "30" }  ← string, not number
// Dangerous: comparing as-is
if (config.timeout > 25) { ... }  // "30" > 25 coerces, but fragile
✓ صحيح
// XML: <timeout>30</timeout>
// JSON output: { "timeout": "30" }
// Safe: explicit coercion where you know the type
if (parseInt(config.timeout, 10) > 25) { ... }

عدم تطابق شكل العنصر الواحد مقابل المصفوفة

عندما يوجد عنصر واحد فقط، يكون الإخراج كائناً؛ وعندما يوجد اثنان أو أكثر، يصبح مصفوفة. كود المستهلك الذي يفعل دائماً result.items.forEach() سينهار عندما يكون items كائناً واحداً. تطبيع إلى مصفوفة دائماً بعد التحويل إذا كان مخططك يسمح بعنصر واحد أو عدة عناصر.

✗ خطأ
// XML with one item: <root><item>a</item></root>
// JSON: { "root": { "item": "a" } }  ← string, not array
result.root.item.forEach(i => console.log(i));  // TypeError: not a function
✓ صحيح
// Normalize to array regardless of count
const items = [].concat(result.root?.item ?? []);
items.forEach(i => console.log(i));  // safe for 0, 1, or many

المحتوى المختلط: النص ومفتاح #text

عندما يحتوي عنصر على سمات ومحتوى نص، يذهب النص تحت #text. الوصول إلى قيمة النص كما لو كانت سلسلة نصية عادية سيُعيد كائناً بدلاً من ذلك. تحقق دائماً مما إذا كانت قيمة العنصر سلسلة نصية أو كائناً بمفتاح #text عندما تكون السمات ممكنة.

✗ خطأ
// XML: <price currency="USD">29.99</price>
// JSON: { "price": { "@_currency": "USD", "#text": "29.99" } }
const amount = result.price;  // { "@_currency": "USD", "#text": "29.99" }, not "29.99"
✓ صحيح
// Handle both plain string and @_/#text object
const raw = result.price;
const amount = typeof raw === 'object' ? raw['#text'] : raw;  // "29.99"

XML غير مُصاغ بشكل سليم كمدخل

يتطلب المحوّل XML مُصاغاً بشكل سليم. الأسباب الشائعة لأخطاء الصياغة السليمة: & غير مُهرَّب في محتوى النص (استخدم &)، وسوم غير متطابقة ( مقابل — XML حساس لحالة الأحرف)، عناصر جذر متعددة، أو وسوم غير مغلقة. تُظهر رسالة الخطأ السطر والعمود للمشكلة الأولى.

✗ خطأ
<!-- Unescaped & — well-formedness error -->
<query>name = 'Alice' & role = 'admin'</query>
✓ صحيح
<!-- Escaped & — valid XML -->
<query>name = 'Alice' &amp; role = 'admin'</query>

القيم ذات الصفر الأمامي تُفسَد بالإكراه

تحافظ هذه الأداة على الأصفار الأمامية لأنها لا تُجري أي إكراه للأنواع. إذا عالجت JSON لاحقاً بمكتبة تُجري الإكراه (بعض أدوات التحقق من مخطط JSON ومُعيِّنات ORM)، قد يفقد الصفر الأمامي. أعلن دائماً عن نوع الحقل صراحةً كسلسلة نصية في مخططك.

✗ خطأ
// XML: <zipCode>01234</zipCode>
// This tool outputs: { "zipCode": "01234" }  ← correct
// But if a downstream schema coerces:
// { zipCode: z.number() }  → 1234  ← leading zero lost
✓ صحيح
// Declare ZIP codes and other padded identifiers as strings
// { zipCode: z.string() }  → "01234"  ← correct

حالات الاستخدام الشائعة

استهلاك واجهات SOAP والـ XML القديمة
الخدمات المؤسسية القديمة (البنوك والتأمين والخدمات اللوجستية) كثيراً ما تكشف عن واجهات SOAP تُعيد XML. حوّل الاستجابة إلى JSON للعمل مع البيانات باستخدام أدوات JavaScript الحديثة أو تخزينها في قاعدة بيانات مستندات أو إعادة توجيهها إلى مستهلك واجهة REST برمجية.
معالجة تغذيات RSS وAtom
تغذيات RSS 2.0 وAtom 1.0 هي XML. حوّل XML التغذية إلى JSON لاستخراج العناوين والروابط وتواريخ النشر والأوصاف لمجمّعات التغذيات ومسارات المحتوى وأنظمة الإشعارات دون اعتمادية مكتبة تحليل XML.
تحليل ملفات خرائط المواقع
تُعدّد ملفات sitemap.xml عناوين URL للموقع مع بيانات وصفية. حوّل خريطة موقع إلى JSON لتحليل تغطية URL وبناء قوائم انتظار الزحف ومقارنة خرائط المواقع عبر البيئات أو تغذية عناوين URL في أداة فاحص روابط أو تدقيق SEO.
تحويل ملفات الإعداد
كثير من الأنظمة المؤسسية (Spring وMaven وAnt وJBoss وTomcat) تستخدم ملفات إعداد XML. حوّلها إلى JSON للتحليل أو سكريبتات الترحيل أو توليد التوثيق أو الاستيراد في أدوات تتعامل مع JSON أصلاً.
تطوير تطبيقات Android للجوال
موارد Android وملفات التخطيط وAndroidManifest.xml كلها XML. حوّلها إلى JSON لسكريبتات التحليل والتدقيق الآلي أو توليد التوثيق حول الأذونات المُعلَن عنها والأنشطة وقيم الموارد.
ترحيل البيانات وETL
تصدير البيانات من الأنظمة المؤسسية (ERP وCRM والرواتب) كثيراً ما يصل كـ XML. حوّل إلى JSON كخطوة أولى في مسار ETL لتحميل البيانات في مخزن بيانات أصلي لـ JSON مثل MongoDB أو Firestore أو واجهة REST برمجية.

تفاصيل تقنية

DOMParser في المتصفح لتحليل XML
يُحلَّل مدخل XML باستخدام DOMParser الأصلي في المتصفح مع نوع MIME هو 'text/xml' — المحرك نفسه المستخدم لعرض SVG وXHTML. متوافق بالكامل مع XML 1.0 ويُبلّغ عن أخطاء الصياغة السليمة مع معلومات السطر والعمود. يتعامل هذا النهج مع مساحات الأسماء وأقسام CDATA وتعليمات المعالجة ومراجع الكيانات بشكل صحيح دون أي اعتمادية خارجية.
تسلسل DOM إلى JSON بشكل تكراري
بعد التحليل، تستعرض الأداة شجرة DOM بشكل تكراري. عقد العناصر تصبح كائنات JSON؛ سماتها تصبح مفاتيح مسبوقة بـ @_؛ العناصر النصية فحسب تصبح قيم سلسلة نصية عادية؛ العناصر التي تحتوي على سمات ومحتوى نص تكتسب مفتاح #text لمحتوى النص. تُجمَع العناصر المتجاورة بالاسم نفسه وتُخرَج كمصفوفة JSON. العقد النصية ذات المسافات البيضاء فحسب بين العناصر تُستبعَد.
بدون إكراه للأنواع — الحفاظ على السلاسل النصية
تُكتَب جميع قيم السمات ومحتوى النص في إخراج JSON كسلاسل نصية. لا يُطبَّق parseInt أو parseFloat أو تحليل منطقي. هذا خيار تصميمي متعمد لمنع تلف البيانات بصمت للقيم ذات الصفر الأمامي والأعشار الحساسة للدقة والسلاسل المنطقية الشكل. يجب تطبيق إكراه الأنواع، عند الحاجة، صراحةً في كود المصب.
100% قائم على المتصفح — بدون رفع ملفات أو خادم
تتم جميع المعالجة في محرك JavaScript في متصفحك. لا تُنقَل أي بيانات عبر الشبكة في أي وقت. تتحول المدخلات الأكبر من 200 كيلوبايت تلقائياً من الوضع المباشر إلى الوضع اليدوي (مطلوب نقر «تحويل» صريح) للحفاظ على استجابة المتصفح ومنع تعطّل سلسلة المعالجة الرئيسية أثناء استعراض DOM الثقيل.

أفضل الممارسات

تحقق من صياغة XML السليمة أولاً
إذا كان مصدر XML مكتوباً يدوياً أو مُنشأً من نظام قد يُنتج إخراجاً مشوهاً أحياناً، تحقق منه قبل التحويل. استخدم زر «التحقق» في منسّق XML لتأكيد صياغة XML السليمة والحصول على مواضع أخطاء دقيقة لأي مشاكل.
طبّع الحقول ذات العنصر الواحد أو المتعدد إلى مصفوفات
عندما يسمح مخطط XML بعنصر فرعي واحد أو عدة عناصر فرعية بالاسم نفسه، سيكون إخراج JSON كائناً لعنصر واحد ومصفوفة للعدة عناصر. طبّع هذه الحقول دائماً في كود المستهلك: const items = [].concat(result.items ?? []) — وهذا آمن لصفر أو واحد أو عدة عناصر ويمنع TypeError.
طبّق إكراه الأنواع صراحةً وبشكل انتقائي
لأن هذه الأداة تحافظ على جميع القيم كسلاسل نصية، طبّق إكراه الأنواع بوعي في الكود الخاص بك للحقول المحددة التي تحتاجه. استخدام parseInt(val, 10) لحقل عدد صحيح معروف آمن. تطبيق الإكراه على نطاق واسع بـ Number(val) يخاطر بتلف القيم ذات الصفر الأمامي والسلاسل الفارغة والأعشار الحساسة للدقة.
تحقق من #text عند الوصول إلى قيم العناصر
إذا كان عنصر يمكنه امتلاك سمات في بعض الحمولات دون غيرها، فستكون قيمة JSON إما سلسلة نصية عادية (بدون سمات) أو كائناً بمفاتيح @_ ومفتاح #text (مع سمات). اكتب دوال وصول قوية: const val = typeof node === 'object' ? node['#text'] : node. هذا النمط يتعامل مع كلا الشكلين ويتجنب قيم undefined الصامتة.
للعمل مع XML بلا خسارة، استخدم منسّق XML
يستبعد تحويل XML إلى JSON التعليقات وتعليمات المعالجة ودلالات مساحات الأسماء. إذا كنت بحاجة إلى الحفاظ على محتوى XML بالكامل، استخدم منسّق XML للتجميل والضغط والتحقق دون أي خسارة. حوّل إلى JSON فقط عندما تحتاج إلى العمل مع البيانات في سياق JSON أصلي.

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

هل تُرسَل بيانات XML إلى خادم عند استخدام هذه الأداة؟
لا. يتم التحويل كلياً داخل متصفحك باستخدام JavaScript. لا يُنقَل XML عبر الشبكة ولا يُخزَّن على أي خادم ولا يُسجَّل أو يُحلَّل. هذا يجعل الأداة آمنة للاستخدام مع حمولات XML التي تحتوي على بيانات اعتماد API أو إعداد خدمة داخلية أو رموز WS-Security لـ SOAP أو بيانات HL7/FHIR الصحية أو أي محتوى حساس آخر. يمكنك التحقق من ذلك بفتح تبويب «الشبكة» في متصفحك — لن ترى أي طلبات عند لصق XML أو تحويله.
كيف تُعيَّن سمات XML في إخراج JSON؟
تصبح سمات XML مفاتيح JSON مسبوقة بـ @_. على سبيل المثال، <product id="P01" category="electronics"> يُنتج كائن JSON يحتوي على "@_id": "P01" و"@_category": "electronics" جانباً لأي مفاتيح عناصر فرعية. عندما يحتوي عنصر على سمات ومحتوى نص في آنٍ واحد — مثل <price currency="USD">29.99</price> — يُخزَّن محتوى النص تحت المفتاح الخاص "#text"، فتكون النتيجة { "@_currency": "USD", "#text": "29.99" }. هذه الاتفاقية متسقة وقابلة للتوقع: @_ تعني دائماً سمة، و#text تعني دائماً محتوى نص العنصر.
هل يُجري المحوّل إكراهاً للأرقام أو القيم المنطقية؟
لا. جميع محتوى نص XML وقيم السمات تصبح سلاسل نصية JSON، بغض النظر عن مظهرها. <count>42</count> تصبح "count": "42" لا 42. <enabled>true</enabled> تصبح "enabled": "true" لا true. هذا مقصود ومهم: يحافظ على الأصفار الأمامية (أرقام الهواتف وأكواد الحسابات والرموز البريدية مثل «01234»)، ودقة الأرقام لقيم مثل «0.100»، والقيم النصية التي تبدو منطقية. إذا كنت بحاجة إلى أرقام أو قيم منطقية في JSON النهائي، طبّق إكراه الأنواع في الكود الخاص بك بعد التحويل — حيث تتحكم بالضبط في الحقول التي تخضع للإكراه.
كيف تُعالَج العناصر المكررة (المتجاورة بالاسم نفسه)؟
عنصر فرعي واحد يصبح كائن JSON. عنصران فرعيان أو أكثر بالاسم نفسه تحت الأب نفسه يصبحان مصفوفة JSON. على سبيل المثال، <root><item>a</item></root> تُنتج { "root": { "item": "a" } }item كائن (سلسلة نصية). لكن <root><item>a</item><item>b</item></root> تُنتج { "root": { "item": ["a", "b"] } }item مصفوفة. هذا يعني أن بنية إخراج JSON تعتمد على عدد العناصر المتجاورة في XML، وهو أحد أسباب كون تحويل XML إلى JSON قائماً على اتفاقيات. إذا كان مخطط XML الخاص بك يمكن أن يحتوي على عنصر واحد أو عدة عناصر، يجب على كود المستهلك التعامل مع حالتي الكائن والمصفوفة.
هل تحويل XML إلى JSON بلا خسارة؟
لا. لدى XML ميزات لا يوجد لها ما يقابلها في JSON وتُفقَد أثناء التحويل: تُستبعَد تعليقات XML ()، وتُستبعَد تعليمات المعالجة ()، وتُحفظ ارتباطات بادئة مساحات الأسماء جزئياً كسمات @_ لكن لا تُحفظ دلالاتها، وقد لا تُحافَظ بشكل مثالي على الترتيب النسبي للعقد ذات المحتوى المختلط (نص متشابك مع عناصر فرعية). بالنسبة لـ XML البنيوي البحت دون تعليقات أو تعليمات معالجة، يحافظ التحويل على جميع أسماء العناصر وأسماء السمات وقيمها ومحتوى النص. لعمل XML بلا خسارة — تنسيق أو تحقق أو فحص XML دون أي فقدان للبيانات — استخدم منسّق XML بدلاً من ذلك.
كيف أحوّل JSON مجدداً إلى XML؟
استخدم محوّل JSON إلى XML المرافق. يطبّق الاتفاقيات نفسها بالعكس: تصبح المفاتيح المسبوقة بـ @_ سمات XML، وتصبح مفاتيح #text محتوى نص العنصر، وتصبح مصفوفات JSON عناصر متجاورة بالاسم نفسه. هذا يجعل الأداتين متماثلتين لحالات الاستخدام ذهاباً وإياباً.
ماذا يحدث لمساحات الأسماء في XML؟
تُعامَل إعلانات مساحات الأسماء (xmlns="..." وxmlns:prefix="...") كسمات عادية وتظهر في إخراج JSON كمفاتيح @_xmlns و@_xmlns:prefix. تُحفظ بادئة مساحة الأسماء في أسماء العناصر كجزء من مفتاح اسم العنصر (مثلاً، يصبح <soap:Body> هو "soap:Body" في JSON). لا يُفسَّر المعنى الدلالي لمساحات الأسماء — أن بادئتين قد تشيران إلى URI نفسه. إذا كانت معالجة مساحات الأسماء بدقة مهمة لحالة استخدامك، حلّل XML في محلل مدرك لمساحات الأسماء بدلاً من تحويله إلى JSON.
لماذا تصبح <n>0123</n> هي "0123" وليس 123؟
لأن المحوّل لا يُجري أي إكراه للأنواع. السلسلة النصية «0123» والرقم 123 قيمتان مختلفتان: «0123» لها صفر أمامي ذو معنى في سياقات كثيرة (أكواد الحسابات والرموز البريدية وأرقام التعريف الوطنية والمعرّفات ذات الحشو). إسقاط ذلك الصفر الأمامي بصمت سيُفسد البيانات. الافتراضي الآمن هو الحفاظ على جميع القيم كسلاسل نصية بدقة كما تظهر في XML. طبّق التحليل الرقمي بشكل انتقائي في الكود الخاص بك للحقول المحددة التي تعلم فيها أن القيمة دائماً عدد صحيح عادي.
ما الفرق بين هذه الأداة ومنسّق XML؟
يُعيد منسّق XML تنسيق XML — يُغيّر المسافات البيضاء لكن الإخراج لا يزال XML. يُغيّر محوّل XML إلى JSON هذا التنسيق كلياً: الإخراج مستند JSON يمثّل بنية XML باستخدام اتفاقية سمات @_. استخدم المنسّق عندما تريد قراءة XML أو تحريره أو التحقق منه أو ضغطه. استخدم هذا المحوّل عندما تحتاج إلى العمل مع بيانات XML في تطبيق JavaScript أو تغذيتها في واجهة REST برمجية أو تخزينها في مخزن مستندات JSON.
هل هناك حد لحجم الملف؟
لا يوجد حد صارم، لكن المدخلات الأكبر من 200 كيلوبايت تتحول تلقائياً من التحويل المباشر إلى الوضع اليدوي. في الوضع اليدوي، يظهر زر «تحويل» ويتم التحويل فقط عند النقر عليه — هذا يُبقي المتصفح متجاوباً أثناء تحليل مستندات XML الكبيرة. للملفات الكبيرة جداً (بيانات تصدير بعدة ميجابايت)، فكر في أدوات سطر الأوامر للحصول على أداء أفضل: python3 -c "import sys, xmltodict, json; print(json.dumps(xmltodict.parse(sys.stdin.read()), indent=2))" أو node -e مع مكتبة XML إلى JSON مخصصة.
هل يتعامل المحوّل مع أقسام CDATA؟
نعم. يُعامَل محتوى قسم CDATA () كمحتوى نص للعنصر ويظهر كقيمة سلسلة نصية عادية في إخراج JSON. تُستبعَد محددات CDATA نفسها — يُحفظ فقط المحتوى الداخلي. على سبيل المثال، <note><![CDATA[if (a < b) return;]]></note> تُنتج "note": "if (a < b) return;" في JSON. وهذا السلوك الصحيح: CDATA مجرد طريقة لتضمين نص يحتوي على أحرف خاصة دون تهريبها؛ المعنى الدلالي هو محتوى النص.
هل يمكن تحويل XML بعناصر جذر متعددة؟
لا. XML بعناصر جذر متعددة غير مُصاغ بشكل سليم، وتتطلب هذه الأداة XML مُصاغاً بشكل سليم كمدخل. إذا أعطاك محلل XML عناصر جذر متعددة (شائع عند تجميع أجزاء من XML)، لفّها في عنصر جذر واحد قبل التحويل. على سبيل المثال، إذا كان لديك <a/><b/>، حوّله كـ <root><a/><b/></root>. ستُشير رسالة الخطأ إلى موضع مشكلة الصياغة السليمة حتى تتمكن من إصلاحها بسرعة.

أدوات ذات صلة

عرض جميع الأدوات →

محوّل Base64 — ترميز وفك ترميز أونلاين

الترميز والتنسيق

رمّز وفك ترميز Base64 مجاناً أونلاين — محوّل فوري مع دعم UTF-8 والرموز التعبيرية. خصوصية 100% — يعمل في متصفّحك. جرّبه الآن.

محوّل CSV إلى JSON

الترميز والتنسيق

حوّل CSV إلى JSON في متصفحك. RFC 4180، استنتاج الأنواع، صف العنوان، أمان الأعداد الكبيرة. خصوصية 100%.

JSON Diff مقارنة

الترميز والتنسيق

قارن ملفي JSON فوراً في متصفحك. عرض جنباً إلى جنب مع تمييز الفروق، وإخراج JSON Patch (RFC 6902)، وتجاهل الحقول المزعجة كالطوابع الزمنية والمعرّفات. خصوصية تامة، بدون رفع ملفات.

منسق JSON — التحقق والضغط وإصلاح الأخطاء

الترميز والتنسيق

نسّق JSON وتحقّق من صحته وأصلح الأخطاء فوراً — محرّر مجاني أونلاين يعمل في متصفّحك. يدعم الضغط والتجميل والتحويل. جرّبه الآن.

مدقق JSON Schema

الترميز والتنسيق

تحقق فوراً من JSON مقابل أي JSON Schema في متصفحك. يدعم Draft 2020-12 و2019-09 وDraft-07 مع رسائل أخطاء دقيقة بالمسار. خصوصية تامة - بدون رفع ولا حساب، مجاني.

محوّل JSON إلى CSV

الترميز والتنسيق

حوّل JSON إلى CSV في متصفحك. RFC 4180، Excel، TSV، أنبوب. خصوصية 100%.