Конвертер JSON в CSV
JSONПреобразует массив объектов JSON в CSV с экранированием RFC 4180. Скачивание результата файлом.
На этой странице
Что такое конвертер JSON в CSV?#
Конвертер JSON в CSV берёт JSON-массив объектов — ту форму, которую большинство API и баз данных отдают, возвращая строки, — и записывает его как текст CSV, значения, разделённые запятыми. Каждый объект становится строкой, каждый ключ верхнего уровня — столбцом, а первая строка содержит имена полей. На выходе — простой текст, который таблицы, инструменты данных и базы данных импортируют напрямую.
CSV выглядит тривиальным, пока не приходится генерировать его правильно. Формат, который реально работает везде, — это RFC 4180: поля, содержащие запятую, двойную кавычку или перевод строки, обязаны быть обёрнуты в двойные кавычки, а любая двойная кавычка внутри поля должна быть удвоена (""). Строки разделяются CRLF, а не «голым» переводом строки. Ошибитесь в чём-либо из этого — и значение вроде Smith, John или He said "hi" молча портит столбцы ниже по потоку: таблица видит лишний столбец или обрезает поле.
Этот конвертер берёт всё это на себя, а также мирится с неудобным фактом, что JSON иерархичен, а CSV плоский: вложенные объекты разворачиваются в столбцы с точечной нотацией (address.city), а поля-массивы или объекты, которые нельзя развернуть, сериализуются как JSON-текст внутри ячейки. Вы также выбираете разделитель — запятая, точка с запятой, табуляция или вертикальная черта, — потому что «CSV» в разных локалях значит разное.
Как пользоваться#
- Вставьте JSON-массив объектов в панель Ввод слева. Одиночный объект или объект, оборачивающий строки под одним ключом вроде
{"data": [...]}, тоже принимается. - Выберите Разделитель —
,(по умолчанию),;,Tabили|. Точка с запятой — то, чего многие европейские локали ждут от Excel; табуляция даёт TSV. - Отметьте Развернуть вложенные (включено по умолчанию), чтобы развернуть вложенные объекты в столбцы с точечной нотацией. Снимите отметку, чтобы оставлять вложенные объекты как JSON-текст в одной ячейке.
- CSV появляется в реальном времени в панели Вывод, с кавычками везде, где поле этого требует. Строка состояния сообщает число строк.
- Нажмите Скачать, чтобы сохранить
data.csv, или Копировать, чтобы забрать текст в буфер. - Пример загружает небольшой двухстрочный набор данных; Очистить сбрасывает обе панели.
Ключевые возможности#
- Кавычки по 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 заранее.