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

Вставьте JSON-массив объектов слева, получите корректно экранированный CSV справа. Заголовок из ключей. Без загрузки.

  1. Вставьте JSON-массив объектов в текстовое поле слева.
  2. Нажмите «Преобразовать в CSV». Строка заголовка строится из объединения ключей всех объектов.
  3. Скопируйте результат или скачайте как data.csv.
  4. Для вложенных значений поле сериализуется в JSON-строку — заранее уплощайте, если нужны плоские столбцы.
Что это делает?

Преобразует JSON-массив объектов в CSV в стиле RFC 4180. Строка заголовка — это объединение всех ключей по объектам. Значения экранируются CSV-кавычками, если содержат запятые, кавычки или переводы строк. Числа и булевы выдаются без кавычек; null и undefined становятся пустыми полями. Вложенные значения (объекты, массивы) сериализуются в JSON-строку в одно поле в кавычках — CSV не может изначально представить иерархию.

Пример

Вход JSON:

[
  {"name":"Ada","age":36,"role":"engineer"},
  {"name":"Grace","age":40,"role":"scientist"}
]

Выход CSV:

name,age,role
Ada,36,engineer
Grace,40,scientist

Типичные ловушки JSON → CSV

CSV — плоский формат. Большинство «странных» выводов идёт из JSON-форм, у которых нет плоского представления.

  • Верхний уровень — не массив. JSON-объект `{"a":1,"b":2}` нельзя преобразовать в CSV напрямую — оберните его в массив: `[{"a":1,"b":2}]`. CSV получит одну строку заголовка и одну строку данных.
  • Разные ключи в строках. Если у первого объекта ключи `{a,b}`, а у второго `{a,c}`, заголовок будет `a,b,c` (объединение). Строки без ключа отдают пустое поле. Нужна более строгая схема — предобработайте.
  • Вложенные значения молча уплощаются. Поле вроде `{"address":{"city":"NY"}}` становится одним столбцом CSV со значением — JSON-строкой `{"city":"NY"}`. Чтобы получить отдельные столбцы `address.city`, уплощайте в JavaScript заранее: `{address_city: row.address.city}`.
  • Переводы строк внутри значений. Многострочная строка в JSON-значении становится CSV-полем в кавычках с буквальными `\n` внутри кавычек. Большинство табличных приложений обрабатывает это корректно; некоторые старые инструменты — нет.
  • Спецсимволы в заголовках. JSON-ключи с запятыми, кавычками или переводами строк работают, но дают строку заголовка, которую некоторые потребители CSV парсят плохо. Если нужна максимальная совместимость, переименуйте ключи в буквы/цифры/подчёркивания перед конвертацией.
  • Запятая в конце JSON. `[{"a":1},]` — невалидный JSON (хвостовая запятая после последнего элемента). Парсер отвергнёт это до шага CSV. Большинство JSON-форматтеров их убирают — пропустите через `/json-prettifier`, если надо.
Часто задаваемые вопросы

Как получить вывод с табуляторами (TSV)?

Эта страница выдаёт CSV с запятыми. Для TSV замените `,` на `\t` в результате или запустите PapaParse с `delimiter: "\t"` в командной строке — та же библиотека.

Сохраняется ли порядок ключей в строке заголовка?

Да — заголовок использует тот порядок, в котором ключи впервые встречаются среди всех объектов. Хотите алфавитный порядок — отсортируйте ключи в JSON перед вставкой.

Как обрабатываются даты?

В JSON нет нативного типа Date — даты обычно уже сериализованы как ISO 8601-строки. Они проходят без изменений. Если JSON получен из JSON.stringify Date, он уже стал ISO-строкой к этому моменту.

Можно ли сделать круг JSON → CSV → JSON?

Для плоских массивов плоских объектов — да. Строки остаются строками, числа — числами (с динамической типизацией PapaParse при импорте). Вложенные значения теряют структуру на стороне CSV и возвращаются как поля JSON-строк, а не как вложенные объекты снова.

Загружается ли мой JSON куда-то?

Нет. Всё работает в вашем браузере — JSON парсится и преобразуется JavaScript на этой странице и не отправляется ни на какой сервер. Проверьте в DevTools браузера.

Какого размера JSON можно конвертировать?

До примерно 50 МБ, прежде чем текстовая область браузера начнёт тормозить. Сама конвертация масштабируется линейно по размеру входа; узкое место — рендеринг. Для больших файлов запускайте PapaParse в командной строке.