Конвертер JSON в CSV и обратно

Преобразовать JSON в CSV и CSV в JSON: автоопределение и выбор колонок, вложенные объекты, массивы, свой разделитель, первая строка как заголовки, скачивание файла. Всё считается в браузере.

Направление

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

Данные на входе

Настройки

Вложенный объект разворачивается в колонки: stock.warehouse становится отдельной колонкой

Колонки

Колонки появятся, когда в поле выше будет разобранный JSON: их имена берутся из ключей объектов.

Всегда брать значения в кавычкиКавычки у всех ячеек, а не только там, где внутри есть разделитель, кавычка или перенос строки
Вывод

Чем разделяются колонки в готовом CSV

CSV по RFC 4180 заканчивает строки CRLF — так их пишет и Excel

Результат

Зачем конвертировать JSON и CSV

JSON удобен программам, а человеку нужна таблица: выгрузка для бухгалтерии, список для аналитика, файл для Excel или «Google Таблиц». Обратная задача встречается не реже — данные приходят таблицей или выгружаются из старой системы CSV-файлом, а дальше их должен принять код, который ждёт массив объектов. Перекладывать это руками нельзя: на сотне строк терпение кончится, а на тысяче начнутся сдвинутые столбцы и потерянные значения.

Механическая часть конвертации проста, сложности начинаются в несовпадениях форматов. У объектов JSON бывает разный набор полей, и колонки приходится собирать по всем строкам сразу, а не по первой. Внутри строки встречаются вложенные объекты и массивы, а в CSV вложенности нет вовсе — инструмент либо разворачивает их в колонки через точку, либо оставляет текстом JSON, либо размножает строку по элементам массива. CSV со своей стороны не один формат, а десяток диалектов: разделитель, кавычки и перевод строки у каждой выгрузки свои, и разделитель здесь угадывается по первой строке, но переопределяется вручную, если угадал неверно.

Всё считается в браузере: текст разбирается на вашем компьютере, файл собирается там же и отдаётся на скачивание. Ни строчки не уходит на сервер, поэтому инструментом можно разбирать выгрузки с персональными данными, и размер файла ограничен только возможностями браузера, а не чужими лимитами на загрузку.

Частые вопросы

Как из JSON получить CSV и наоборот?

Направление выбирается списком «Направление». В режиме «JSON в CSV» вставьте в поле «Исходный JSON» массив объектов — таблица появится в поле результата, а кнопка «Скачать .csv» отдаст её файлом. В режиме «CSV в JSON» вставьте в поле «Исходный CSV» строки таблицы, и там же появится массив объектов. Текст обоих полей хранится раздельно, поэтому переключение направления ничего не затирает: можно собрать CSV, тут же проверить обратный путь и вернуться к исходным данным.

Что делать с вложенными объектами и массивами?

За них отвечают два списка в настройках. По умолчанию вложенный объект разворачивается в колонки через точку: у поля profile из примера получаются колонки profile.plan и profile.since, а массив tags — колонки tags.0 и tags.1. Значение «Записать строкой JSON» оставляет вложенность текстом JSON в одной ячейке — так делают, когда таблицу читает программа, а не человек. Значение «Повторить строку для каждого элемента» размножает строку по элементам массива: у строки с двумя тегами выйдет две строки, каждая со своим тегом, остальные поля повторятся. Если массивов в одной строке несколько, они разворачиваются параллельно, по номеру элемента, а не произведением: короткий массив идёт по кругу, а число строк равно самому длинному.

Какие поля попадут в колонки, если объекты разной структуры?

Все, какие встретились хотя бы в одной строке: список «Колонки» собирается из найденных ключей, и у строки, где поля нет, останется пустая ячейка. Это заметно по примеру: колонка code есть только у одной записи из трёх, и в остальных строках она пустая. Ненужные колонки снимаются галочками — в файл попадут только отмеченные, и это же решает обратную задачу: из широкого JSON можно выгрузить три поля. Если список колонок пуст, значит в поле ещё нет разобранного JSON: без данных колонки взять неоткуда.

Почему CSV открылся в Excel одной колонкой?

Почти всегда дело в разделителе. Excel с русской локалью ожидает точку с запятой, а файл собран с запятой, или наоборот — тогда вся строка попадает в первый столбец, а не разбивается на ячейки. Разделитель задаётся списком «Разделитель» в настройках вывода, а посмотреть, чем разобран входной файл, можно в подсказке под списком «Разделитель на входе»: при автоопределении там написан угаданный символ. Если строка не разбилась на ячейки, разделитель можно задать и вручную: путь «Данные → Из текста» спрашивает его отдельно, вместе с форматом колонок. Но если буквы в этой же колонке превратились в «ÐœÐ¾Ñква», дело не в разделителе, а в кодировке: файл записан в UTF-8, и её нужно выбрать при импорте.

Чем опасны ведущие нули и длинные числа в CSV?

Тем, что в самом CSV типа значения нет: и «007», и «7» — это просто текст между разделителями. Excel решает за файл и читает «007» как число, теряя ноль, а длинный номер счёта или карты (больше 15 знаков) превращает в 1,23E+16, отбрасывая последние цифры. Обратная конвертация уже не вернёт исходное значение. В JSON тип хранится, поэтому строка «007» в JSON остаётся строкой и в CSV попадает без изменений — но формат ячейки в Excel от содержимого файла не зависит: колонку с кодом открывают через мастер импорта, задав ей текстовый формат, — иначе ноль пропадёт уже при первом сохранении файла из Excel. В обратную сторону работает список «Типы данных»: значение «Всё строками» оставляет каждую ячейку текстом, а автоматическое определение превращает «007» в 7 только там, где это действительно число.

В каком порядке идут колонки?

В том, в каком поля встречаются в JSON: колонка встаёт на место первого появления ключа, дальше идут остальные в порядке обхода строк. Алфавитной сортировки нет — порядок полей в объекте JSON и есть порядок колонок в CSV. В обратную сторону порядок тоже сохраняется: ключи объекта JSON идут по заголовкам CSV слева направо. Если колонки должны стоять иначе, порядок задаётся в исходных данных: переставьте поля в JSON (или столбцы в CSV) перед конвертацией — здесь для этого настройки нет.

Данные отправляются на сервер?

Нет. Разбор, конвертация и сборка файла выполняются в браузере на JavaScript: страница не делает ни одного запроса и ничего не сохраняет. Вставили текст, посмотрели результат, скачали файл — данные не покидают ваш компьютер, и инструментом можно пользоваться офлайн и с рабочими данными, которые нельзя выносить наружу.