Конвертер JSON в CSV

Вставьте JSON или откройте файл, чтобы получить CSV для Excel или Google Sheets, либо переключите направление и превратите CSV в JSON. Вложенные объекты получают столбцы с точкой, кавычки и запятые внутри значений обрабатываются, а первые строки показываются таблицей.

Направление
Массив объектов, один объект, ответ API с массивом внутри или JSON Lines (один объект на строку).
Разделитель
Параметры

Вставьте JSON в поле, откройте файл или попробуйте пример.

Выгружаете списки серверов, журналы или ответы API в таблицу? Когда понадобится сам сервер: Сейчас от 3,02 € в месяц, на выбор: 2 226 серверов.

Работает в вашем браузере: ничего из введённого не отправляется на сервер.

Как работает конвертация

JSON в CSV: каждый объект массива становится строкой. Столбцы — это все ключи, которые встречаются в любом объекте, в порядке первого появления, поэтому у объекта без ключа получается пустая ячейка. Вложенные объекты разворачиваются в столбцы с точкой, например host.name, а массивы записываются текстом JSON в одну ячейку, потому что список не помещается в один столбец таблицы. Числа сохраняются в точности как записаны, поэтому длинные ID не округляются.

Кавычки соответствуют RFC 4180, стандарту CSV: значение, содержащее разделитель, двойную кавычку или перевод строки, берётся в двойные кавычки, а кавычка внутри него удваивается. Остальные значения остаются как есть. Выберите точку с запятой, если ваша таблица использует запятую для десятичных дробей, как Excel во многих европейских странах.

CSV в JSON: разборщик понимает поля в кавычках, удвоенные кавычки, переводы строк внутри кавычек и окончания строк CRLF, LF и CR. Разделитель определяется по первым строкам: выбирается тот, который делит их на одинаковое число полей. Если есть строка заголовков, получается по объекту на строку; без неё — по массиву на строку. Типизация превращает 42, 3.5, true, false и null в значения JSON, но оставляет 007 и очень длинные числа текстом, поэтому почтовые индексы и ID сохраняются.

Пример

Два сервера: у одного вложенный объект host и список портов, у другого нет IP-адреса, а в примечании есть запятая:

servers.json
[
  { "id": 1, "host": { "name": "web-1", "ip": "203.0.113.10" }, "ports": [80, 443] },
  { "id": 2, "host": { "name": "db-1" }, "note": "primary, eu" }
]

Столбцы — объединение всех ключей. host превращается в host.name и host.ip, массив ports остаётся текстом JSON и берётся в кавычки, потому что содержит запятую, отсутствующие IP и порты — пустые ячейки, а примечание берётся в кавычки из-за запятой:

servers.csv
id,host.name,host.ip,ports,note
1,web-1,203.0.113.10,"[80,443]",
2,db-1,,,"primary, eu"

Обратная конвертация этого CSV с включёнными типами и вложенностью снова даёт объекты. id снова число, host — объект, но ports возвращаются текстом «[80,443]», а пустые ячейки — пустыми строками, потому что ячейка CSV не может сообщить, что была списком или отсутствовала:

servers.json
[
  {"id":1,"host":{"name":"web-1","ip":"203.0.113.10"},"ports":"[80,443]","note":""},
  {"id":2,"host":{"name":"db-1","ip":""},"ports":"","note":"primary, eu"}
]

Вопросы

Как преобразовать JSON в CSV?

Вставьте JSON выше или откройте файл .json, оставьте выбранным «JSON → CSV» и выберите разделитель. CSV сразу появится вместе с предпросмотром таблицей; скопируйте его или скачайте файлом .csv и откройте в Excel, Google Sheets или LibreOffice. JSON должен быть массивом объектов, но подойдут и один объект, и ответ API с одним массивом внутри, и JSON Lines.

Как преобразовать CSV в JSON?

Переключите направление на «CSV → JSON», затем вставьте CSV или откройте файл .csv. Разделитель определяется автоматически. Если первая строка — названия столбцов, каждая строка становится объектом; отключите это, чтобы получить массивы. Включите типизацию, чтобы получать числа и true или false вместо строк, и вложенность, чтобы столбцы вроде server.cpu снова превращались в объекты.

Что происходит с вложенными объектами и массивами JSON?

Вложенные объекты разворачиваются в столбцы с точкой: объект host с полем name становится столбцом host.name, на любую глубину. Массивы записываются текстом JSON в одну ячейку, например [80,443], потому что у списка нет естественного места в одной ячейке. Отключите разворачивание, чтобы вложенные объекты тоже оставались текстом JSON.

Почему Excel помещает мой CSV в один столбец или портит буквы?

Excel использует разделитель списков вашей системы: там, где десятичным знаком служит запятая, как в Германии или Франции, он ожидает точки с запятой. Выберите здесь «Точка с запятой», и столбцы разделятся. Искажённые буквы означают, что Excel прочитал файл в старой кодовой странице вместо UTF-8; отметьте метку порядка байтов перед скачиванием или импортируйте файл через «Данные → Из текста/CSV» и выберите UTF-8.

Как преобразовать JSON в CSV в командной строке?

С помощью jq, для массива плоских объектов: jq -r '(.[0] | keys_unsorted) as $k | $k, (.[] | [.[$k[]]]) | @csv' data.json > data.csv. Столбцы берутся только из первого объекта. Для CSV в JSON Python не требует дополнительных пакетов: python3 -c "import csv,json,sys; print(json.dumps(list(csv.DictReader(sys.stdin))))" < data.csv.