Перейти к содержимому

Направление конвертации

Конвертация CSV в JSON

Преобразование CSV → JSON на сервере, без установки программ

.csv.json

.csv.json
  1. Загрузить
  2. Выбрать формат
  3. Скачать

Загрузка файлов

Область приёма файла

или

Файлы CSV. До 5 МБ, до 20 файлов за раз. Изображение можно вставить из буфера обмена: Ctrl+V.

Исходники и результаты хранятся 60 минут, затем стираются фоновым уборщиком. Предельный размер файла — 5 МБ, срок хранения — час.

CSV и JSON: характеристики

Характеристики форматов CSV и JSON рядом
Характеристика.csvCSV.jsonJSON
Полное названиеComma-Separated ValuesJavaScript Object Notation
Расширение.csv.json
MIME-типыtext/csv, application/csv, text/comma-separated-valuesapplication/json, text/json, application/x-json
СодержимоеТекстовоеТекстовое
Несколько страниц в файлеНетНет
РазделительЗапятая, точка с запятой или табуляциянет данных
ЭкранированиеДвойные кавычки, кавычка внутри удваиваетсянет данных
ЛистыРовно один на файлнет данных
Формулы и оформлениеНе поддерживаютсянет данных
СтандартRFC 4180RFC 8259 / ECMA-404
Чем открытьMicrosoft Excel, LibreOffice Calc, Google Таблицы, Notepad++, VS Code, БлокнотVS Code, Notepad++, Sublime Text, JetBrains IDE, Google Chrome, jq
СпецификацияОписание форматаОписание формата
Разработчикнет данныхДуглас Крокфорд
Год появлениянет данных2001
Типы данныхнет данныхСтрока, число, логическое, null, массив, объект
Кодировканет данныхUTF-8
Комментариинет данныхНе поддерживаются
Схеманет данныхОпционально, через JSON Schema

Преобразование CSV → JSON

У CSV нет единой обязательной спецификации: RFC 4180 фиксирует распространённую практику, а не стандарт, и файлы расходятся в разделителе, переводе строки и способе экранирования. Разбор поэтому опирается на два явно заданных условия: строка заголовка присутствует, разделитель указан вами. Каждая последующая строка становится объектом внутри массива.

Читает файл конечный автомат, а не разбиение текста по символу: внутри поля, заключённого в двойные кавычки, и разделитель, и перевод строки считаются обычными символами, а удвоенная кавычка внутри такого поля читается как один символ. Благодаря этому многострочный адрес или примечание с запятой не разрушают таблицу. Метка порядка байтов в начале файла отбрасывается — иначе она вошла бы в имя первого поля, и обращение к нему из кода перестало бы работать.

Распознавание типов ограничено намеренно. Целевая модель различает число, строку и логическое значение, исходная — нет, поэтому решение принимается по форме записи: последовательность цифр без значащего нуля впереди даёт число, литералы true и false — логическое значение, всё прочее сохраняется текстом. Отдельно защищены коды и индексы: запись 007 числом потеряла бы старший разряд, поэтому она остаётся строкой. Поле без содержимого превращается в строку нулевой длины, а не пропадает: одинаковый набор ключей у всех объектов важнее экономии на пустых значениях.

Имена полей копируются из первой строки дословно — с регистром, пробелами и кириллицей; повторяющийся заголовок создаёт конфликт ключей, и до значения второго такого столбца добраться будет нельзя. Кодировка ожидается UTF-8: однобайтовый файл из старого табличного редактора даст на выходе посторонние символы, и лечится это пересохранением источника, а не параметрами конвертации. Отступ результата — два пробела, что прибавляет к объёму четверть-треть и отключается параметром. На обработку отводится 120 секунд.

Порядок преобразования CSV → JSON

  1. Шаг 1

    Ревизия строки заголовка

    Первая строка целиком превращается в набор ключей, поэтому в ней не должно быть повторов и посторонних подписей. При её отсутствии ключами станут данные.

  2. Шаг 2

    Приведение к UTF-8

    Перекодировка на сервере не выполняется: файл читается как UTF-8. Выгрузку из старого табличного редактора пересохраните в этой кодировке до загрузки.

  3. Шаг 3

    Разделитель и форматирование

    Укажите символ, которым поля разделены фактически, и решите, нужны ли отступы: с ними документ читается глазами, без них он компактнее на четверть-треть.

  4. Шаг 4

    Контроль типов

    Откройте результат и посмотрите на числовые поля, коды и даты — приведение типов заметно именно на них.

Вопросы по работе сервиса

Вся строка попала в одно поле.

Указан не тот разделитель. Автомат разбора следует заданному символу буквально: если в файле стоит точка с запятой, а выбрана запятая, признака конца поля в строке не находится ни разу. Повторите преобразование с фактическим разделителем.

Почему код 007 не стал числом?

Значащий нуль впереди — признак кода, а не количества. Числом такая запись стала бы семёркой, и восстановить разряды из результата было бы нечем. Правило распространяется на артикулы, почтовые индексы, номера документов и любые записи, начинающиеся с нуля.

Как обрабатывается перенос строки внутри поля?

Он сохраняется, если поле заключено в двойные кавычки: внутри них перевод строки не считается концом записи. Такое значение попадёт в результат целиком, вместе с символом переноса. Поле без кавычек с переносом внутри разорвёт таблицу — это дефект исходного файла.

Что произойдёт с повторяющимися именами столбцов?

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

Нужно ли отключать отступы?

Отключайте, если документ уходит по сети или в хранилище: форматирование прибавляет к объёму четверть-треть и на разбор принимающей стороной не влияет. Оставляйте, если результат предстоит читать и сверять глазами.