یک آرایهٔ JSON را برای اکسل به CSV تبدیل کنید
فایل JSON را انتخاب کنید و جداکنندهٔ کاما، محافظت از فرمول و نشانهٔ UTF-۸ اکسل را روشن بگذارید. هر شیء به یک ردیف تبدیل میشود، اجتماع کلیدهایش سرستونها را میسازد و CSV حاصل بدون آپلود منبع و بدون اینکه متن نامطمئن بهعنوان فرمول تلقی شود در اکسل باز میشود.
یک شیء JSON، آرایهای از اشیا یا آرایهای از آرایهها تا ۲۰ مگابایت. فقط در همین تب تجزیه میشود.
کلیدهای اشیا به ترتیب اولین مشاهده به ستون تبدیل میشوند، از جمله کلیدهایی که فقط در رکوردهای بعدی ظاهر میشوند.
نشانهٔ UTF-۸ به نسخههای قدیمی اکسل کمک میکند نامها و متنهای غیر ASCII را درست تشخیص دهند.
محافظت از فرمول به سلولهای متنی پرخطر پیشوند میدهد و اعداد و مقادیر بولی واقعی JSON را بهصورت مقادیر نوعدار باقی میگذارد.
چگونگی کار
مراحل انجام کار
- فایل را بهصورت UTF-۸ رمزگشایی کنید، نشانهٔ UTF-۸ ابتدای فایل را در صورت وجود دور بریزید و آن را با تجزیهگر داخلی JSON مرورگر تجزیه کنید. ورودی خالی یا از نظر نحوی نامعتبر با دلیل تجزیهگر رد میشود.
- مدل ردیف را از سطح بالا تعیین کنید. یک شیء یک ردیف است؛ آرایهای از اشیا چندین ردیف نامدار است؛ آرایهای از آرایهها چندین ردیف موقعیتی است. شکلهای ردیف مخلوط بهجای حدس زدن رد میشوند.
- برای ردیفهای شیء، اجتماع کلیدها را به ترتیب اولین مشاهده گردآوری کنید تا فیلدی که فقط در یک رکورد بعدی ظاهر میشود همچنان یک ستون پایدار بگیرد و ردیفهای قبلی در آنجا سلول خالی داشته باشند.
- وقتی مسطح کردن انتخاب شده، اشیای تودرتو را به مسیرهای نقطهای escape شده مانند profile.city تبدیل کنید. آرایهها را بهصورت JSON در یک سلول نگه دارید، چون طول آنها داده است، نه مجموعهای قابلاتکا از ستونها.
- null یا فیلد غایب را بهصورت سلول خالی، مقادیر بولی و اعداد را بهصورت مقادیر JSON، رشتهها را بهصورت متن، و هر شیء یا آرایهٔ باقیمانده را بهصورت JSON فشرده بنویسید.
- وقتی محافظت از فرمول روشن است، به سلولهای رشتهای و سرستونهایی که اولین نویسهٔ معنادارشان =، +، - یا @ است یک آپاستروف پیشوند بدهید. اعداد واقعی JSON، از جمله اعداد منفی، عددی میمانند.
- هر گیومهٔ درون فیلد را دوتایی کنید و وقتی فیلد شامل جداکنندهٔ انتخابشده، گیومه یا شکست خط است آن را در گیومه بگذارید. هر ردیف را مطابق قرارداد CSV با CRLF تمام کنید.
- نشانهٔ اختیاری سهبایتی UTF-۸ را اضافه کنید، متن کامل را کدگذاری کنید و برای خروجی کاما یا نقطهویرگول .csv و برای تب .tsv ارائه دهید. در هیچ مرحلهای چیزی به جایی فرستاده نمیشود.
فرضها
- شکلهای سطح بالای پشتیبانیشده عبارتاند از یک شیء، آرایهای فقط از اشیا، یا آرایهای فقط از آرایهها. یک مقدار ابتدایی، آرایهٔ خالی یا مخلوطی از شکلهای ردیف جدول بیابهامی ندارد و رد میشود.
- ستونهای اشیا اجتماع کلیدها در همهٔ ردیفهاست، مرتبشده بر اساس اولین ظهور هر کلید. غایب و null هر دو سلول خالی CSV هستند، چون CSV مقدار null مجزایی ندارد.
- مسطح کردن فقط از میان اشیا پایین میرود. آرایهها بهصورت JSON فشرده در یک سلول میمانند؛ گسترش جایگاههای فهرست به یک ردیف غیرمعمولِ بلند اجازه میداد هزاران ستون بسازد و وانمود میکرد جایگاه در هر رکورد یک معنا دارد.
- نقطه یا بکاسلش لفظی درون یک کلید JSON پیش از بههمپیوستن بخشهای مسیر با بکاسلش escape میشود، بنابراین کلیدی به نام profile.city نمیتواند با مسیر تودرتوی profile و سپس city تداخل کند.
- محافظت از فرمول فقط به رشتههای JSON و نام ستونها اعمال میشود. عدد نوعدارِ JSON که با علامت منفی آغاز میشود دستنخورده میماند؛ همان مقدار اگر رشته باشد پیشوند میگیرد، چون صفحهگسترده نوع سلول را از متن CSV تشخیص میدهد.
- نشانهٔ UTF-۸ بهطور پیشفرض برای نسخههای قدیمی اکسل روشن است. سه بایت EF BB BF را اضافه میکند و هیچ دادهٔ ردیف یا ستونی ندارد؛ ابزارهای دیگر صفحهگسترده و پایگاه داده معمولاً آن را تحمل میکنند.
- خروجی کاما و نقطهویرگول پسوند .csv دارد. جداکنندهٔ تب از .tsv و نوع MIME text/tab-separated-values استفاده میکند، نه اینکه دادهٔ جدولی را جداشده با کاما برچسب بزند.
- ورودی به ۲۰ مگابایت، ۵۰۰٬۰۰۰ ردیف و ۵٬۰۰۰ ستون محدود است. متن رندرشده به ۶۴ میلیون نویسه محدود است تا یک گسترش نتواند حافظهٔ تب را تمام کند.
پرسشهای رایج
چرا CSV آمادهٔ اکسل با سه بایت نامرئی شروع میشود؟
آنها نشانهٔ ترتیب بایت UTF-۸ یعنی EF BB BF هستند. هیچ دادهٔ جدولیای ندارند. به نسخههایی از اکسل که کدگذاری را بهطور قابلاعتماد استنباط نمیکنند میگویند نامها و دیگر متنهای غیر ASCII را بهصورت UTF-۸ رمزگشایی کنند.
آیا همهٔ اشیای JSON همان ستونهای اکسل را میگیرند؟
بله. سرستون اجتماع کلیدهای یافتشده در همهٔ رکوردهاست، به ترتیبی که هر کلید برای اولین بار ظاهر میشود. رکوردی که یکی از آن کلیدها را نداشته باشد در آن ستون یک سلول خالی میگیرد.
منابع
روش کامل، مثال محاسبهشده و همهٔ فرضهای این نتیجه در این صفحه آمده است: تبدیل JSON به CSV.