Уплощение теряет информацию, и это нормально
JSON — дерево, CSV — прямоугольник. Любое преобразование обязано решить, что делать с тем, что не помещается, и делать вид, будто это не так, — значит готовить сюрпризы:
- Вложенный объект → колонки через точку,
address.city - Массив → текст JSON в ячейке
- null → пустая ячейка
- Отсутствующий ключ → пустая ячейка, колонка на месте
Если дерево понадобится обратно, сохраните исходный JSON. CSV здесь — формат выгрузки, а не хранения.
Объединённый заголовок
Настоящие данные неровные: у части записей есть note, у части нет. Если взять
за заголовок ключи первой записи, потеряются все колонки, появляющиеся позже.
Здесь берётся объединение всех ключей в порядке первого появления, чтобы ничего
не пропало незаметно.
Экранирование, на которое можно положиться
Значение берётся в кавычки, если содержит разделитель, кавычку, перенос строки либо пробелы по краям. Внутренние кавычки удваиваются. Это правило RFC 4180 — именно оно делает так, что файл с колонкой адреса открывается правильно, а не сдвигает все последующие поля на одну вправо.
Вопросы
Что происходит с вложенными объектами?+
Они превращаются в колонки с точкой в названии: объект адреса с городом внутри даёт колонку address.city. У вложенности нет представления в плоской таблице, а точечные пути — то соглашение, которое любой пользователь таблиц уже узнаёт.
Что происходит с массивами внутри записи?+
Они пишутся в ячейку как текст JSON. Правильного плоского представления списка в одной ячейке не существует, а придумать своё — например, склеить через точку с запятой — значит молча испортить любое значение, где эта точка с запятой есть.
У записей разные ключи. Это работает?+
Да. Заголовок — объединение всех встреченных ключей в порядке первого появления, а у записи без ключа ячейка остаётся пустой. Брать ключи только из первой записи, как делают многие конвертеры, значит молча терять колонки.
Откроется ли файл в Excel корректно?+
Экранирование соответствует RFC 4180, поэтому значения с запятыми, кавычками и переносами строк уцелеют. Если в вашей локали запятая — десятичный разделитель, выберите точку с запятой, иначе Excel разложит числа по разным колонкам.