Инструменты
Руководства

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

JSON

Преобразует массив объектов JSON в CSV с экранированием RFC 4180. Скачивание результата файлом.

100 % на клиенте Без бэкенда
Ввод
Вывод
На этой странице

Что такое конвертер JSON в CSV?#

Конвертер JSON в CSV берёт JSON-массив объектов — ту форму, которую большинство API и баз данных отдают, возвращая строки, — и записывает его как текст CSV, значения, разделённые запятыми. Каждый объект становится строкой, каждый ключ верхнего уровня — столбцом, а первая строка содержит имена полей. На выходе — простой текст, который таблицы, инструменты данных и базы данных импортируют напрямую.

CSV выглядит тривиальным, пока не приходится генерировать его правильно. Формат, который реально работает везде, — это RFC 4180: поля, содержащие запятую, двойную кавычку или перевод строки, обязаны быть обёрнуты в двойные кавычки, а любая двойная кавычка внутри поля должна быть удвоена (""). Строки разделяются CRLF, а не «голым» переводом строки. Ошибитесь в чём-либо из этого — и значение вроде Smith, John или He said "hi" молча портит столбцы ниже по потоку: таблица видит лишний столбец или обрезает поле.

Этот конвертер берёт всё это на себя, а также мирится с неудобным фактом, что JSON иерархичен, а CSV плоский: вложенные объекты разворачиваются в столбцы с точечной нотацией (address.city), а поля-массивы или объекты, которые нельзя развернуть, сериализуются как JSON-текст внутри ячейки. Вы также выбираете разделитель — запятая, точка с запятой, табуляция или вертикальная черта, — потому что «CSV» в разных локалях значит разное.

Как пользоваться#

  1. Вставьте JSON-массив объектов в панель Ввод слева. Одиночный объект или объект, оборачивающий строки под одним ключом вроде {"data": [...]}, тоже принимается.
  2. Выберите Разделитель, (по умолчанию), ;, Tab или |. Точка с запятой — то, чего многие европейские локали ждут от Excel; табуляция даёт TSV.
  3. Отметьте Развернуть вложенные (включено по умолчанию), чтобы развернуть вложенные объекты в столбцы с точечной нотацией. Снимите отметку, чтобы оставлять вложенные объекты как JSON-текст в одной ячейке.
  4. CSV появляется в реальном времени в панели Вывод, с кавычками везде, где поле этого требует. Строка состояния сообщает число строк.
  5. Нажмите Скачать, чтобы сохранить data.csv, или Копировать, чтобы забрать текст в буфер.
  6. Пример загружает небольшой двухстрочный набор данных; Очистить сбрасывает обе панели.

Ключевые возможности#

  • Кавычки по RFC 4180. Поля обёртываются, а внутренние кавычки удваиваются ровно тогда, когда требует спецификация, поэтому запятые, кавычки и переводы строк внутри значений никогда не ломают структуру столбцов.
  • Окончания строк CRLF. Вывод использует Windows-стиль переводов строк, что максимизирует совместимость с Excel и другими табличными процессорами на разных платформах.
  • Выбор разделителя. Запятая, точка с запятой, табуляция или вертикальная черта — выберите, чего ждёт ваш потребитель, и кавычки адаптируются к выбранному разделителю.
  • Разворачивание с точечной нотацией. Вложенные объекты разворачиваются в именованные столбцы, чтобы их внутренние поля жили сами по себе; массивы и «упрямые» объекты становятся JSON-текстом в ячейке, а не отбрасываются.
  • Стабильные столбцы на неровных строках. Заголовок — объединение ключей всех строк в порядке первого появления, поэтому строки с лишними или недостающими полями всё равно выстраиваются правильно.

Разбор примера#

Загрузите Пример, и вводом будет двухстрочный массив:

[
  { "name": "Ada Lovelace", "role": "Engineer", "skills": ["math", "logic"] },
  { "name": "Bob",          "role": "PM",       "skills": ["docs"] }
]

С разделителем , и включённым Развернуть вложенные столбцы — name, role, skills. Поле skills — массив, поэтому оно сериализуется в JSON-текст; поскольку этот текст содержит запятые и двойные кавычки, он берётся в кавычки, а его внутренние кавычки удваиваются:

name,role,skills
Ada Lovelace,Engineer,"[""math"",""logic""]"
Bob,PM,"[""docs""]"

Заметьте две вещи, которые конвертер сделал молча и правильно. Ada Lovelace не в кавычках, потому что содержит только пробел — ни разделителя, ни кавычки, ни перевода строки, — поэтому оборачивать его бессмысленно. А ячейка skills для Ada обёрнута кавычками с удвоенными внутренними, потому что содержит и запятые, и символы ", которые иначе сломали бы строку.

Переключите Разделитель на ;, и запятые внутри ячейки skills больше не конфликтуют с разделителем, но поле всё равно в кавычках из-за встроенных двойных кавычек — конвертер берёт в кавычки всегда, когда присутствует любой триггер RFC 4180, а не только разделитель.

FAQ#

Почему двойные кавычки в моих данных удвоены до ""?#

Это правило RFC 4180 для встраивания литеральной двойной кавычки внутрь обёрнутого поля: напишите её дважды. Значение He said "hi" превращается в "He said ""hi""" в CSV — внешние кавычки оборачивают поле (потому что оно содержит "), а каждая внутренняя " удваивается, чтобы парсер понял, что это данные, а не конец поля. Инструменты, правильно читающие CSV, восстановят исходные одинарные кавычки при импорте.

Моё поле содержит запятую. Это сломает столбцы?#

Нет. Любое поле, содержащее разделитель, двойную кавычку, возврат каретки или перевод строки, автоматически оборачивается двойными кавычками, поэтому значение Smith, John превращается в "Smith, John" и остаётся в одном столбце. Экранировать что-либо вручную не нужно.

Зачем выбирать точку с запятой или табуляцию вместо запятой?#

Из-за локали. Excel во многих европейских локалях использует ; как разделитель списка по умолчанию, поэтому файл с запятыми открывается со всем, сжатым в один столбец, пока вы не переимпортируете его. Табуляция (TSV) — самое безопасное, когда данные могут содержать и запятые, и точки с запятой: табуляции в реальных значениях почти не встречаются. Выбирайте то, чего ждёт ваш потребитель.

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

С включённым Развернуть вложенные вложенный объект разворачивается в столбцы с точечной нотацией (address.city, address.zip), поэтому каждое внутреннее значение получает свой столбец. Поле-массив нельзя без потерь развернуть в столбцы, поэтому оно сериализуется как JSON-текст внутри ячейки, например ["math","logic"]. Ничего не отбрасывается; если вы хотите каждый элемент массива в отдельной строке, переструктурируйте JSON заранее.