انتقال داده بین CSV، JSON، YAML و XML
داده به ندرت در یک فرمت ثابت میماند. یک گزارش به صورت صفحهگسترده میرسد، یک API میخواهد JSON، یک pipeline استقرار YAML انتظار دارد و جایی در گوشهای یک سرویس قدیمی هنوز XML صحبت میکند. بیشتر اصطکاک روزانه کار با داده خود داده نیست، بلکه رساندن آن از شکلی که دارید به شکلی است که چیز دیگری میخواهد. این تمام کار یک مبدل داده است: متن ساختاریافته را در یک نماد بگیر و بدون از دست دادن معنا در نماد دیگری دوباره منتشر کن.
مبدلهای Speedor کاملاً در مرورگر شما اجرا میشوند. میچسبانید، کلیک میکنید، نتیجه را کپی میکنید. هیچ چیزی آپلود نمیشود، هیچ چیزی لاگ نمیشود و هیچ چیزی دستگاه شما را ترک نمیکند. برای هر کسی که تا به حال قبل از انداختن یک صادرات مشتری در یک وبسایت تصادفی تردید کرده، این طراحی فقطمحلی هدف اصلی است.
هر فرمت واقعاً برای چه کاری مناسب است
قبل از شروع به جابجایی بین آنها کمک میکند بدانید این فرمتها چرا وجود دارند، چون هر کدام برای یک کار متفاوت ساخته شدهاند.
CSV شبکه مسطح و کاما-جدا شدهای است که صفحهگستردهها دوست دارند. از نظر ماهیت جدولی است: ردیفها و ستونها، بدون تودرتویی. در Excel، Google Sheets یا Numbers باز کنید و کار میکند. مشکل اینکه CSV مفهومی برای انواع ندارد. مقدار 007 ممکن است یک رشته، یک عدد یا یک کد پستی باشد و CSV نمیگوید کدام.
JSON زبان مشترک وب مدرن است. تقریباً هر API که تا به حال صدا میزنید به آن صحبت میکند. JSON تودرتویی، آرایهها و چند نوع واقعی (رشته، عدد، boolean، null) را مدیریت میکند که آن را بسیار بیانگرتر از یک جدول مسطح میکند. فشرده، دوستانه برای ماشین و در همه جا پشتیبانی میشود.
YAML پسر عموی خواناتر JSON است. از تورفتگی به جای پرانتز استفاده میکند، از comment پشتیبانی میکند و معمولاً فرمت انتخابی برای فایلهای تنظیمات، Docker Compose، مانیفستهای Kubernetes و pipelineهای CI است. وقتی یک انسان باید چیزی را با دست ویرایش کند، YAML معمولاً برای چشم مهربانتر است.
XML بزرگسال موقر است. طولانی، پر از برچسب و هنوز عمیقاً در سیستمهای سازمانی، سرویسهای SOAP، پیامرسانی مالی و استانداردهای سند مثل RSS جا خوش کرده. در پروژههای جدید کمتر با آن روبرو میشوید، اما وقتی به آن نیاز دارید واقعاً به آن نیاز دارید.

تبدیلها کجا واقعاً اتفاق میافتند
وقتی شروع به نگاه کردن میکنید سناریوها کاملاً ملموس میشوند. بازاریابی یک صفحهگسترده از ۴۰۰۰ تماس به شما میدهد و API ثبتنام فقط یک آرایه JSON قبول میکند. صفحه را به CSV صادر میکنید، از CSV به JSON عبور میدهید و یک payload آماده POST دارید. بدون اسکریپت چسبندگی، بدون pandas، بدون انتظار برای یک مهندس.
یا یک تکه JSON از همان API برمیگردانید و میخواهید آن را در یک فایل تنظیمات که سرویس شما در شروع میخواند بریزید. با JSON به YAML آن را تبدیل کنید و چیزی تمیز و قابل comment دریافت میکنید که درست در repo شما جای میگیرد. رفتن در جهت مخالف هم کار میکند وقتی ابزاری فقط JSON قبول میکند اما تنظیماتتان در YAML زندگی میکند.
و بعد ادغامی که هیچکس از آن لذت نمیبرد: یک سیستم شریک که فقط XML میبلعد. payload خود را در JSON میسازید چون اپلیکیشن شما اینطور فکر میکند، سپس در مرز به XML تبدیل میکنید. شکل همان میماند، فقط syntax تغییر میکند.
نکاتی که ارزش دانستن دارند
تبدیل فرمت همیشه بدون اتلاف نیست و وانمود کردن به این موضوع منجر به باگ میشود. چند چیز برای در نظر گرفتن:
CSV انواع را فراموش میکند. چون هر سلول فقط متن است، اعداد، booleanها و تاریخها همه به عنوان رشته خارج میشوند مگر اینکه مبدل برای شما حدس بزند. اگر true باید یک boolean باشد نه کلمه «true»، خروجی را قبل از ارسال بررسی کنید.
YAML به whitespace اهمیت میدهد. تورفتگی در YAML تزئینی نیست، ساختاری است. یک فاصله اضافه میتواند تغییر دهد کدام کلید به یک مقدار تعلق دارد و tab کاملاً ممنوع است. بعد از هر رفتوبرگشت JSON به YAML ارزش دارد یک نگاه سریع بزنید، یا نتیجه را از یک قالبساز JSON عبور دهید تا تأیید کنید ساختار سالم مانده.
XML و JSON تمیز به هم نگاشت نمیشوند. JSON آرایه دارد؛ XML المانهای تکرار شده دارد. JSON attribute ندارد؛ XML آنها را همه جا دارد. بیشتر مبدلها یک قرارداد منطقی انتخاب میکنند، اما اگر XML شما attribute زیاد استفاده کند، JSON تولید شده کمی متفاوت از JSON دستنویس به نظر میرسد. این انتظارپذیر است، نه عیب.
عمق تودرتویی اهمیت دارد. CSV مسطح است، پس JSON عمیقاً تودرتو همیشه نمیتواند در ستونها جمع شود بدون flatten کردن کلیدها (مثل address.city). در جهت مخالف، یک CSV مسطح یک آرایه مسطح میشود، هرگز یک درخت.

چرا فقطمحلی اینجا اهمیت دارد
خیلی از دادههایی که میخواهید تبدیل کنید متعلق به شما برای اشتراکگذاری نیستند. رکوردهای کاربر، تنظیمات داخلی، کلیدهای API مدفون در یک پاسخ، ردیفهای مالی. خیلی از مبدلهای آنلاین بیصدا paste شما را به سرور ارسال میکنند تا کار را انجام دهند. Speedor این کار را نمیکند. منطق تبدیل در تب مرورگر شما اجرا میشود، داده هرگز از شبکه عبور نمیکند و بستن تب تمام پاکسازی است. این سریعتر هم هست، چون رفتوبرگشت آپلودی وجود ندارد، و زمانی که صفحه بارگذاری شد آفلاین هم کار میکند. رایگان، بدون ثبتنام، بدون سهمیه.
سوالات متداول
آیا دادهام وقتی تبدیل میشود به جایی آپلود میشود؟
نه. هر تبدیلی به صورت محلی در مرورگر شما با JavaScript اجرا میشود. داده شما هرگز دستگاه شما را ترک نمیکند و هرگز به سرور ارسال نمیشود، به همین دلیل است که این ابزارها حتی وقتی آفلاین هستید هم کار میکنند.
آیا میتوانم بدون نوشتن کد CSV را به JSON تبدیل کنم؟
بله. CSV خود را در مبدل بچسبانید، تبدیل را کلیک کنید و آرایه JSON نتیجه را کپی کنید. ردیف اول به عنوان هدرهای ستون در نظر گرفته میشود که کلیدهای هر شیء میشوند.
چرا JSON تبدیل شدهام اعداد را به صورت رشته نشان میدهد؟
CSV مفهوم انواع داده ندارد، پس هر مقداری به صورت متن شروع میکند. بعضی مبدلها سعی میکنند اعداد و booleanها را به صورت خودکار تشخیص دهند، اما وقتی مطمئن نیستند مقادیر را به صورت رشته نگه میدارند تا از خراب شدن مواردی مثل کدهای پستی یا IDهایی با صفرهای پیشرو جلوگیری کنند.
تفاوت بین JSON و YAML چیست؟
هر دو انواع مشابهی از داده را نشان میدهند، اما YAML به جای آکولاد و پرانتز از تورفتگی استفاده میکند، comment را میپذیرد و عموماً برای خواندن و ویرایش توسط انسان آسانتر است. JSON فشردهتر است و پیشفرض بیشتر APIهای وب است.
آیا تبدیل بین این فرمتها همیشه بدون اتلاف است؟
معمولاً، اما نه همیشه. JSON، YAML و XML در بیشتر موارد به خوبی به هم نگاشت میشوند. دشوارترین جفتها CSV هستند که مسطح و بدون نوع است، و XML که attributeها و المانهای تکراری را متفاوت از آرایههای JSON مدیریت میکند. همیشه خروجی برای دادههای مهم را بررسی کنید.
آیا این مبدلها روی فایلهای بزرگ کار میکنند؟
از آنجا که کار روی دستگاه شما انجام میشود، بیشتر فایلهای روزانه را به راحتی مدیریت میکنند. عملکرد به دستگاه شما بستگی دارد نه به سرور، پس فایلهای بسیار بزرگ عمدتاً به حافظه مرورگر شما محدود میشوند.
