JSON تودرتو را به ستونهای CSV مسطح کنید
«مسطح کردن اشیا به مسیرهای نقطهای» را انتخاب کنید. مقدار تودرتویی مانند profile.city به ستونی به نام profile.city تبدیل میشود و کلیدهایی که در رکوردهای بعدی پیدا میشوند به همان سرستونی میپیوندند که اولین بار دیده شده. آرایهها بهصورت متن JSON در یک سلول میمانند، چون گسترش یک فهرست دلخواه باعث میشود تعداد و معنای ستونها به هر ردیف وابسته شود.
یک شیء JSON، آرایهای از اشیا یا آرایهای از آرایهها تا ۲۰ مگابایت. فقط در همین تب تجزیه میشود.
کلیدهای اشیای تودرتو به مسیرهای نقطهای پایدار تبدیل میشوند، بنابراین address.city و address.country آشکارا همخانوادهاند.
آرایهها بهصورت JSON سریالشده در یک سلول نقلقولشده میمانند، نه اینکه جایگاه اقلام به مجموعهای بیکران از ستونها تبدیل شود.
کلید لفظیای که نقطه دارد با بکاسلش escape میشود تا نتواند با یک مسیر تودرتو تداخل کند.
چگونگی کار
مراحل انجام کار
- فایل را بهصورت 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 استفاده میکند، نه اینکه دادهٔ جدولی را جداشده با کاما برچسب بزند.
- ورودی به ۲۰ مگابایت، ۵۰۰٬۰۰۰ ردیف و ۵٬۰۰۰ ستون محدود است. متن رندرشده به ۶۴ میلیون نویسه محدود است تا یک گسترش نتواند حافظهٔ تب را تمام کند.
پرسشهای رایج
چرا آرایههای JSON به ستونهای شمارهدار CSV گسترش نمییابند؟
طول آرایه داده است، نه طرحواره. گسترش جایگاهها به یک رکورد غیرمعمولِ بلند اجازه میدهد هزاران ستون اضافه کند و عنصر صفر را در ردیفهای مختلف یک فیلد واحد جلوه دهد، حتی اگر چنین نباشد.
نقطه در یک کلید اصلی JSON چگونه نمایش داده میشود؟
پیش از بههمپیوستن بخشهای مسیر، نقطه یا بکاسلش درون کلید با بکاسلش escape میشود، بنابراین کلید profile.city و مسیر تودرتوی profile و سپس city سرستونهای جداگانه میمانند.
منابع
روش کامل، مثال محاسبهشده و همهٔ فرضهای این نتیجه در این صفحه آمده است: تبدیل JSON به CSV.