JSON به XML و برعکس: یک مبدل کاربردی برای دو دنیای داده
بیشتر توسعهدهندگان چه بخواهند چه نخواهند با XML و JSON کار میکنند. APIهای وب مدرن تقریباً به طور انحصاری JSON صحبت میکنند، اما لحظهای که یک بانک، بیمهگر، endpoint دولتی، ERP سازمانی یا سرویس SOAP قدیمی لمس میکنید، XML دوباره ظاهر میشود. مبدل JSON به XML در این صفحه JSON را به XML و XML را به JSON مستقیماً در مرورگرتان تبدیل میکند، بنابراین میتوانید بدون کپی کردن بارهای حساس در یک سرویس راه دور بین این دو فرمت جابجا شوید.

XML و JSON واقعاً چه هستند
XML (Extensible Markup Language) یک فرمت markup است که حول تگهای تودرتو، ویژگیها و namespaceها ساخته شده. برای تبادل اسناد و دادههای ساختاریافته طراحی شده، و ماشینآلات زیادی حمل میکند: schemaها (XSD)، namespaceها، دستورالعملهای پردازش، کامنتها، بخشهای CDATA و یک اعلام رسمی در بالا. این غنی بودن دلیلی است که XML در سیستمهای legacy و سازمانی هنوز غالب است. آن را در وب سرویسهای SOAP، فیدهای RSS و Atom، فایلهای پیکربندی (Spring، Maven، پیکربندیهای اپ .NET)، فرمتهای سند اداری و استانداردهای پیامرسانی مالی مانند SWIFT و ISO 20022 مییابید، جایی که بانکها و بیمهگران هر روز XML مبادله میکنند.
JSON (JavaScript Object Notation) بسیار سادهتر است: اشیاء با جفتهای کلید/مقدار، آرایهها، رشتهها، اعداد، بولینها و null. تقریباً یک به یک روی ساختارهای داده تقریباً هر زبان برنامهنویسی نگاشت میشود، که دقیقاً همین دلیل است که APIهای وب مدرن، endpointهای REST، اپهای موبایل و فایلهای پیکربندی مانند package.json را تسخیر کرد. JSON معمولاً ۳۰ تا ۵۰ درصد کوچکتر از XML معادل است و محسوساً سریعتر تجزیه میشود، تا حدی چون تگهای بستهشونده و ماشینآلات ویژگی را که XML را پرحجم میکنند حذف میکند.
تفاوتهای کلیدی که برای تبدیل مهم هستند
دو فرمت به اندازه کافی با هم همپوشانی دارند تا روی هم نگاشت شوند، اما نه به تمیزی. چند تفاوت ساختاری تقریباً تمام اصطکاک را ایجاد میکنند:
- ویژگیها در مقابل nodeهای فرزند. XML بین
<user id="1">(یک ویژگی) و<user><id>1</id></user>(یک عنصر فرزند) تمایز قائل میشود. JSON چنین مفهومی ندارد، بنابراین مبدلها یکی اختراع میکنند. طبق قرارداد، ویژگیها به کلیدی مانند@attributesتا میشوند یا با@پیشوند میگیرند، در حالی که متن عنصر در کلیدی مانند#textقرار میگیرد. - آرایهها. JSON آرایههای بومی دارد. XML ندارد. یک فهرست در XML فقط همان تگ تکرار شده است، مثل سه عنصر
<item>پشت هم. مبدلها باید حدس بزنند چه زمانی خواهران و برادران تکراری باید به یک آرایه JSON فشرده شوند، و چه زمانی یک عنصر منفرد باید یک شیء ساده بماند. - Namespaceها. XML از namespaceها (پیشوندهای
xmlns:soap) برای جلوگیری از تداخل نامها در سراسر schemaها استفاده میکند. JSON معادل ندارد، بنابراین پیشوندها یا به صورت کاراکترهای تحتاللفظی در کلیدها باقی میمانند یا حذف میشوند. - پرحجمی و متادیتا. XML میتواند متادیتا را از طریق ویژگیها به یک node پیوست کند؛ JSON همه چیز را به صورت کلید و مقدار بیان میکند. این JSON را فشردهتر و خواناتر میکند، در حالی که XML قدرت اعتبارسنجی را از طریق XSD schemaها حفظ میکند.
مشکلات تبدیل که باید مراقب آنها بود
رفت و برگشت JSON به XML به JSON و انتظار نتیجه یکسان اشتباه کلاسیک است. تبدیل در هر دو جهت اگر قوانین را کنترل نکنید مخرب است. این موارد را در نظر بگیرید:
- ویژگیها خراب میشوند. وقتی JSON را به XML تبدیل میکنید، ابزار به یک قانون برای اینکه کدام کلیدها ویژگی در مقابل عنصر میشوند نیاز دارد. وقتی به جهت مخالف میروید، ویژگیها باید جایی بنشینند، و آن «جایی» (پیشوند
@، بلوک@attributes) بین کتابخانهها متفاوت است. اگر parser پاییندست قرارداد متفاوتی انتظار دارد، دادهها اشتباه به نظر میرسند حتی اگر چیزی گم نشده باشد. - عنصر منفرد در مقابل آرایه. یک فید XML با یک
<item>یک شیء JSON تولید میکند؛ همان فید با دو آیتم یک آرایه JSON تولید میکند. کدی که یک آرایه فرض میکند در مورد تک آیتم خراب میشود. این یک منبع رایج از bugهای تجزیه RSS و SOAP است. - Namespaceها نشت میکنند یا ناپدید میشوند. بسته به ابزار،
soap:Bodyممکن است به کلیدی به نام تحتاللفظیsoap:Bodyتبدیل شود، یا پیشوند ممکن است کاملاً حذف شود و معنای سند را تغییر دهد. - محتوای مختلط و نوعها. XML همه چیز را به صورت متن تفسیر میکند، بنابراین مقداری مانند
trueیا42ممکن است بعد از تبدیل به JSON رشته بماند، در حالی که جهت معکوس جایی بومی برای کامنتها یا CDATA ندارد.

چرا تبدیل فقط محلی مهم است
بارهای JSON و XML اغلب حساسترین چیزی هستند که یک توسعهدهنده مدیریت میکند: پاسخهای API با توکنها، پیامهای SOAP با شماره حسابها، فایلهای پیکربندی با اطلاعات اعتبارسنجی. مبدلی که در مرورگر شما اجرا میشود هیچکدام از آنها را آپلود نمیکند. تجزیه و سریالیزاسیون روی دستگاه شما اتفاق میافتد، هیچچیزی به سرور ارسال نمیشود، و میتوانید ابزار را وقتی صفحه بارگذاری شده به صورت آفلاین استفاده کنید. برای اشکالزدایی دادههای تولید یا هر چیزی تحت یک رژیم انطباق، این تفاوت بین یک بررسی سریع امن و یک نشت داده تصادفی است.
اگر نیاز دارید بعد از آن نتیجه را مرتب کنید، این ابزار را با مبدلهای داده دیگر ما ترکیب کنید، یا خروجی را قبل از دادنش به ابزار بعدی در pipeline با قالببندیکننده JSON مرتب کنید.
سوالات متداول
آیا مبدل JSON یا XML من را جایی آپلود میکند؟
خیر. هر دو تبدیل JSON به XML و XML به JSON کاملاً در مرورگر شما اجرا میشوند. دادههایتان هرگز دستگاهتان را ترک نمیکنند و ابزار بعد از بارگذاری صفحه به صورت آفلاین کار میکند.
هنگام تبدیل به JSON، ویژگیهای XML چطور مدیریت میشوند؟
ویژگیهای XML در یک کلید اختصاصی قرار میگیرند، که معمولاً با علامت @ پیشوند میگیرند یا زیر یک بلوک ویژگیها گروهبندی میشوند، چون JSON هیچ مفهوم بومی ویژگی ندارد. محتوای متنی عنصر به طور جداگانه ذخیره میشود تا هر دو از تبدیل سالم بمانند.
چرا عنصر XML منفرد من به جای آرایه به یک شیء تبدیل شد؟
XML آرایههای بومی ندارد، بنابراین یک فهرست فقط یک تگ تکراری است. وقتی فقط یک عنصر حضور دارد، مبدلها نمیتوانند آن را از یک شیء معمولی تشخیص دهند، بنابراین به یک شیء تبدیل میشود. دو یا بیشتر خواهران و برادران با همان نام تگ به یک آرایه JSON فشرده میشوند.
چه اتفاقی برای namespaceهای XML مانند soap یا xmlns میافتد؟
JSON معادل namespaceهای XML ندارد. بسته به تبدیل، پیشوند به صورت متن تحتاللفظی درون کلید نگه داشته میشود یا حذف میشود. اگر consumer پاییندست شما به پیشوندهای namespace متکی است، خروجی را بررسی کنید.
آیا میتوانم JSON را به XML تبدیل کنم و سند اصلی را برگردانم؟
نه همیشه دقیقاً. تبدیل در هر دو جهت مخرب است چون ویژگیهای XML مانند کامنتها، CDATA و تمایز ویژگی در مقابل عنصر معادل JSON تمیزی ندارند. رفت و برگشت بهترین کار میکند وقتی قوانین نامگذاری را در هر دو طرف کنترل میکنید.
XML در مقایسه با JSON کجا هنوز استفاده میشود؟
XML در سیستمهای legacy و سازمانی زندگی میکند: وب سرویسهای SOAP، فیدهای RSS و Atom، فایلهای پیکربندی و پیامرسانی مالی مانند SWIFT و ISO 20022. JSON بر APIهای وب مدرن، endpointهای REST و اپهای موبایل غالب است.
