Перейти к содержимому

Конвертировать JSON в CSV

Превратите ответы API, выгрузки и JSON Lines в CSV, который без проблем открывается в Excel: записи находятся автоматически, вложенные поля раскладываются по понятным столбцам, а большие ID сохраняются до последней цифры.

  • Не сохраняется
  • Без очереди и ожидания
  • Без регистрации и водяных знаков

Как это работает

1

Добавьте JSON

Перетащите файл .json или .jsonl либо вставьте JSON прямо в поле.

2

Выберите записи

Список записей находится автоматически, даже глубоко внутри data.items. Выберите, как записывать массивы, и проверьте предпросмотр.

3

Скачайте

CSV с нужным вам разделителем и кодировкой — для Excel, Google Таблиц или базы данных.

Как превратить дерево в сетку

JSON — это дерево, а CSV — прямоугольник, и вся конвертация сводится к вопросу, как одно превратить в другое. Простой случай — массив объектов с одинаковыми ключами: каждый объект — строка, каждый ключ — столбец, и ничего не теряется. Именно так выглядит большинство ответов API и выгрузок, поэтому обычно всё просто работает. Все сложности возникают из документов другой формы.

Вложенные объекты раскладываются соединением ключей, так что объект адреса внутри клиента превращается в столбцы вроде address.city и address.postcode — соглашение, которое понимает любая электронная таблица и не описывает ни один стандарт. Ключи, которые есть в одних объектах и отсутствуют в других, становятся столбцами, пустыми в строках, где их не было, — и это правильный ответ: иначе пришлось бы выбрасывать данные, которые есть только у части записей.

Вложенные массивы — это место, где сетка действительно не успевает за деревом. Одна запись с тремя строками заказа внутри — это одна строка со списком, а не три строки: если превратить её в три, все остальные поля продублируются, и смысл данных незаметно изменится. Поэтому в строки разворачивается один массив объектов, а все остальные записываются в свою ячейку как текст. Если вам нужны строки заказов, а не сами заказы, направьте конвертацию на этот массив; у дерева с двумя списками рядом нет единственно правильного прямоугольника, и выбрать его можете только вы.

На выходе есть две тонкости. Значения, содержащие запятую, кавычку или перевод строки, берутся в кавычки, чтобы уцелеть, — это правильный CSV, хотя в исходном файле выглядит странно. А длинный числовой идентификатор становится опасным, как только CSV попадает в электронную таблицу: Excel прочитает его как число, округлит после пятнадцатой цифры и отбросит ведущий ноль — это проблема, которую вносит электронная таблица, а не конвертация.

Если нужно другое

jq — правильный инструмент, когда структуру нужно определить, а не угадать: jq -r '.orders[] | [.id, .customer.name, .total] | @csv' выбирает ровно нужные поля ровно с нужного уровня — такого контроля автоматическое разворачивание дать не может. К тому же он работает потоком, так что размер файла перестаёт иметь значение.

Для вложенных данных в целом Miller — mlr --ijson --ocsv flatten — и pandas.json_normalize в Python дают явный контроль над тем, насколько глубоко разворачивать и что делать со списками. А если JSON по-настоящему иерархический, а не табличный, конвертировать его в CSV может быть вообще плохой идеей — база данных или файл JSON с записью на строку сохранят ту структуру, которую сетка вот-вот отбросит.

Частые вопросы

Как вложенный JSON превращается в столбцы?

Каждое вложенное поле становится отдельным столбцом, названным по своему пути: {"address": {"city": "Oslo"}} даёт столбец address.city. Столбцы идут в том порядке, в каком впервые встречаются в данных, а не по алфавиту, а у записей без какого-то поля соответствующая ячейка просто остаётся пустой.

Что происходит с массивами?

Выбираете вы: объединить значения в одной ячейке ("red; green"), разложить по пронумерованным столбцам (tags.0, tags.1), оставить как текст JSON или — для массива объектов, например строк заказа, — записать по строке на каждый элемент с повтором родительских полей.

Большие числа сохраняются точно?

Да. ID, которые JavaScript не может представить точно, — Twitter, Discord и 64-битные ID баз данных — копируются цифра в цифру, тогда как большинство конвертеров молча округляют 1234567890123456789 до 1234567890123456800.

Поддерживается ли JSON Lines (NDJSON)?

Да. Файл с одним объектом JSON на строку распознаётся автоматически, и каждая строка становится строкой таблицы.

Что, если в моём JSON ошибка?

Вы увидите точную строку и столбец с подсвеченным проблемным фрагментом и понятное объяснение — например, лишняя запятая в конце или одинарные кавычки, скопированные из кода JavaScript.

Мои данные где-нибудь сохраняются?

Нет. JSON читается, а CSV записывается здесь; ничего никуда не отправляется и ничего не сохраняется.

Полезно знать: Разворачивать в строки можно только один массив объектов за раз; остальные массивы записываются в свою ячейку. Очень большие файлы ограничены памятью вашего браузера.

Разместите этот инструмент на своём сайте

Бесплатно для любого блога, страницы класса или справочной статьи. Вставьте один фрагмент кода — и посетители смогут пользоваться инструментом прямо на вашей странице.