JSON в CSV
Конвертируйте массив JSON в CSV для Excel, Google Таблиц или импорта в базу данных. Вложенные объекты разворачиваются в столбцы с точечной нотацией, а записи с разной структурой объединяются в единый набор столбцов.
- Файлы никогда не покидают ваше устройство
- Бесплатно, без регистрации
- Без водяных знаков
- Работает офлайн после загрузки
Как пользоваться: json в csv
- 1
Вставьте JSON
Лучше всего подходит массив объектов — если нужна другая структура, инструмент об этом сообщит.
- 2
Выберите параметры
Укажите разделитель и нужно ли разворачивать вложенные объекты в столбцы с точечной нотацией.
- 3
Скачайте CSV
Сохраните файл и откройте его прямо в Excel или Google Таблицах.
Почему JSON и CSV — принципиально разные формы представления данных
JSON создан для представления произвольно вложенных данных древовидной структуры — объектов внутри объектов, массивов внутри объектов, значений по-настоящему разных типов бок о бок, — тогда как CSV способен представить только одну плоскую однородную таблицу: строки и столбцы, где у каждой строки одинаковый набор столбцов, а каждая ячейка — это одно простое значение. Преобразование из первой формы во вторую неизбежно требует решений о том, как развернуть нечто, изначально не укладывающееся в строки и столбцы, — и именно здесь кроется основная сложность такого преобразования, а не в разборе самого синтаксиса JSON, который прост, а в том, чтобы определить, что вообще должна означать строка таблицы для данных, которые никогда не были табличными.
Как вложенные объекты становятся именами столбцов с точками
У вложенного объекта вроде `{"user": {"name": "Ada", "id": 42}}` нет единственного очевидного столбца, в который он мог бы превратиться в плоской таблице, поэтому он разворачивается в два отдельных столбца — `user.name` и `user.id`, — а точечная нотация точно сохраняет, откуда каждое значение взялось в исходной структуре. Это широко признанное соглашение именно потому, что оно обратимо: столбец с именем `user.name` однозначно описывает путь обратно во вложенную структуру, что важно, если CSV когда-нибудь понадобится конвертировать обратно в JSON или импортировать в систему, понимающую пути с точками как вложенные поля.
Вложенные массивы обрабатываются иначе, и сделано это намеренно: вместо того чтобы разворачивать массив в дополнительные строки — что изменило бы количество строк таблицы в зависимости от того, сколько вложенных элементов оказалось в одной записи, а это по-настоящему неожиданный и часто нежелательный побочный эффект, — значение массива сериализуется как текст JSON внутри одной ячейки. Количество строк остаётся предсказуемым и точно соответствует количеству входных записей, что почти всегда и нужно тому, кто конвертирует данные в таблицу, ценой того, что эту одну ячейку придётся дополнительно разбирать, если понадобится её содержимое по отдельности.
Обработка записей, у которых не совпадают наборы полей
Реальные ответы API и JSON, собранный вручную, часто содержат записи, где не у всех объектов одинаковые ключи — необязательное поле присутствует в одних записях и отсутствует в других, либо схема со временем менялась, поэтому старые и новые записи немного различаются. CSV не может представить такие различия напрямую, поскольку каждая строка должна укладываться в один и тот же фиксированный набор столбцов; программа, читающая CSV-файл, не сможет понять, что в строке «не хватает» столбца, если только у каждой строки явно нет ячейки для него. Решение состоит в вычислении объединения всех ключей, встреченных во всех записях, в порядке их первого появления, и заполнении пустой ячейкой любой записи, в которой отсутствует то или иное поле, — так структура остаётся согласованной по всему файлу, не теряя незаметно столбцы какой-либо записи и не сдвигая значения в неверный столбец.
Часто задаваемые вопросы
Какую структуру JSON он ожидает?
Массив объектов — структуру, которую возвращает почти любой API. Одиночный объект обрабатывается как таблица из одной строки. Массивы примитивных значений дают файл с одним столбцом.
Как обрабатываются вложенные объекты?
Они разворачиваются в имена столбцов с точечной нотацией, поэтому `{"user":{"name":"Ada"}}` превращается в столбец `user.name`. Вложенные массивы записываются как текст JSON в одной ячейке, а не разворачиваются в дополнительные строки, поскольку изменение количества строк почти никогда не нужно при экспорте в таблицу.
Что если в моих записях разные поля?
Набор столбцов — это объединение всех найденных ключей в порядке их первого появления. У записей, где поле отсутствует, соответствующая ячейка остаётся пустой, а не отбрасывается и не сдвигается.
Почему Excel портит мой CSV?
Обычно дело в разделителе: во многих европейских локализациях Excel ожидает точку с запятой, а не запятую. Переключите разделитель в настройках. Кроме того, при открытии Excel переформатирует длинные числовые идентификаторы в экспоненциальную запись — этого можно избежать, импортировав файл через Данные → Из текста.
Экранируются ли кавычки и запятые внутри значений?
Да, в соответствии с RFC 4180. Поля, содержащие разделитель, кавычку или перенос строки, заключаются в кавычки, а внутренние кавычки удваиваются — поэтому файл корректно читается любой совместимой программой и без потерь конвертируется обратно.