Конвертировать JSON в CSV
Превратите ответы API, выгрузки и JSON Lines в CSV, который без проблем открывается в Excel: записи находятся автоматически, вложенные поля раскладываются по понятным столбцам, а большие ID сохраняются до последней цифры.
- Не сохраняется
- Без очереди и ожидания
- Без регистрации и водяных знаков
Как это работает
Добавьте JSON
Перетащите файл .json или .jsonl либо вставьте JSON прямо в поле.
Выберите записи
Список записей находится автоматически, даже глубоко внутри data.items. Выберите, как записывать массивы, и проверьте предпросмотр.
Скачайте
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 записывается здесь; ничего никуда не отправляется и ничего не сохраняется.
Полезно знать: Разворачивать в строки можно только один массив объектов за раз; остальные массивы записываются в свою ячейку. Очень большие файлы ограничены памятью вашего браузера.
Разместите этот инструмент на своём сайте
Бесплатно для любого блога, страницы класса или справочной статьи. Вставьте один фрагмент кода — и посетители смогут пользоваться инструментом прямо на вашей странице.