Направление конвертации
Конвертация JSON в CSV
Преобразование JSON → CSV на сервере, без установки программ
- Загрузить
- Выбрать формат
- Скачать
Загрузка файлов
Область приёма файла
или
Файлы JSON. До 5 МБ, до 20 файлов за раз. Изображение можно вставить из буфера обмена: Ctrl+V.
В таблицу разворачивается массив однотипных объектов: ключи становятся заголовками столбцов. Вложенные объекты приводятся к плоскому виду через точку в имени колонки, а у записей с разным набором полей часть ячеек останется пустой.
Исходники и результаты хранятся 60 минут, затем стираются фоновым уборщиком. Предельный размер файла — 5 МБ, срок хранения — час.
JSON и CSV: характеристики
| Характеристика | .jsonJSON | .csvCSV |
|---|---|---|
| Полное название | JavaScript Object Notation | Comma-Separated Values |
| Разработчик | Дуглас Крокфорд | нет данных |
| Год появления | 2001 | нет данных |
| Расширение | .json | .csv |
| MIME-типы | application/json, text/json, application/x-json | text/csv, application/csv, text/comma-separated-values |
| Содержимое | Текстовое | Текстовое |
| Несколько страниц в файле | Нет | Нет |
| Типы данных | Строка, число, логическое, null, массив, объект | нет данных |
| Стандарт | RFC 8259 / ECMA-404 | RFC 4180 |
| Кодировка | UTF-8 | нет данных |
| Комментарии | Не поддерживаются | нет данных |
| Схема | Опционально, через JSON Schema | нет данных |
| Чем открыть | VS Code, Notepad++, Sublime Text, JetBrains IDE, Google Chrome, jq | Microsoft Excel, LibreOffice Calc, Google Таблицы, Notepad++, VS Code, Блокнот |
| Спецификация | Описание формата | Описание формата |
| Разделитель | нет данных | Запятая, точка с запятой или табуляция |
| Экранирование | нет данных | Двойные кавычки, кавычка внутри удваивается |
| Листы | нет данных | Ровно один на файл |
| Формулы и оформление | нет данных | Не поддерживаются |
Преобразование JSON → CSV
JSON описывает данные деревом произвольной глубины, CSV — прямоугольником из строк и столбцов. Прямого соответствия между этими моделями нет, поэтому дерево уплощается: путь до каждого листа склеивается в имя колонки через точку. Развёртывается массив однотипных объектов — он ищется в корне документа или в полях обёртки ответа.
Правила уплощения одинаковы на любой глубине. Ключ вложенного объекта склеивается с ключом родителя: поле city внутри address внутри customer даёт колонку customer.address.city. Элементы массива получают порядковый индекс — tags.0, items.1.price. Набор колонок собирается объединением ключей всех записей: столбец появляется, если поле встретилось хотя бы однажды, у остальных строк ячейка остаётся пустой, а порядок столбцов определяется первым появлением ключа.
Точность чисел — то, что стоит проверить до импорта. JSON не различает целые и дробные значения, а разбор идёт в двоичной плавающей точке двойной точности, где целые представимы без искажений до 9 007 199 254 740 991. Девятнадцатизначный идентификатор заказа, записанный числом, потеряет младшие разряды ещё на этапе разбора — в исходном JSON такие поля должны быть строками. Даты остаются строками в том виде, в каком они записаны, чаще всего по ISO 8601.
Оформление результата подчиняется стандарту CSV: значение, внутри которого встречается разделитель, кавычка или перенос строки, заключается в двойные кавычки, а кавычка внутри такого значения удваивается. Файл записывается в UTF-8 с меткой порядка байтов из трёх байтов — она нужна табличным редакторам, чтобы опознать кодировку без диалога импорта. Разделитель задаётся параметром: запятая, точка с запятой или табуляция. На обработку отводится 120 секунд.
Порядок преобразования JSON → CSV
Шаг 1
Проверка структуры источника
Лучше всего разворачивается массив однотипных объектов в корне файла. Если в документе несколько разных списков, вырежьте нужный до загрузки.
Шаг 2
Загрузка
Направление принимает несколько файлов за задание, на каждое преобразование отводится 120 секунд.
Шаг 3
Разделитель
Запятая — для импорта в базы данных и скрипты, точка с запятой — для табличных редакторов с русской локалью, табуляция — для переноса через буфер обмена.
Шаг 4
Контроль колонок
Откройте результат и проверьте заголовки с точками: они должны соответствовать путям во вложенных объектах. Отдельно посмотрите длинные числовые поля.
Вопросы по работе сервиса
По какому правилу дерево раскладывается по колонкам?
Объект — по имени: ключи родителя и потомка склеиваются через точку до самого листа дерева. Массив — по индексу: tags.0, tags.1 и далее. Ни одно значение при этом не теряется, но таблица становится тем шире, чем глубже была вложенность.
Длинный числовой идентификатор изменился в последних цифрах.
Это ограничение самого JSON: числа разбираются в двоичной плавающей точке двойной точности, где без искажений представимы целые до 9 007 199 254 740 991. Более длинные значения округляются на этапе разбора, до формирования таблицы. Такие поля следует хранить в исходном файле строками в кавычках.
У записей разный набор полей. Что будет с таблицей?
Заголовки соберутся объединением: колонка появится, если поле встретилось хотя бы у одной записи, у остальных строк соответствующая ячейка останется пустой. Порядок столбцов определяется тем, в какой записи ключ встретился впервые.
Восстановит ли обратное направление исходную структуру?
Нет. При разборе CSV колонка customer.address.city станет плоским ключом с точками в имени, а не тремя уровнями вложенности: точка в заголовке — это символ имени, а не признак структуры. Если нужна исходная форма документа, сохраняйте оригинальный JSON.
Зачем в файл добавляется метка порядка байтов?
Чтобы табличные редакторы опознали UTF-8 без диалога импорта. Без этих трёх байтов часть программ читает файл в однобайтовой кодировке системы, и кириллица превращается в набор посторонних символов. Скрипты и базы данных метку игнорируют либо отбрасывают при чтении.