CSV в JSON
Последнее обновление: 1 октября 2026 г.
Прочитайте таблицу CSV обратно в массив объектов JSON. Строка заголовков даёт ключи, при чтении соблюдаются правила кавычек RFC 4180, а определение типов можно включить или оставить выключенным. Всё выполняется в браузере, таблица не покидает машину.
Что делает это преобразование
CSV хранит имена столбцов в первой строке, поэтому преобразование — прямое сопоставление: ячейки заголовка становятся именами свойств, а каждая следующая строка — одним объектом массива. Таблица
id,name
1,Ada
2,Grace
превращается в [{"id":"1","name":"Ada"},{"id":"2","name":"Grace"}]. Обратите внимание, что значения — строки: это поведение по умолчанию, и причина объясняется в следующем разделе.
Строка заголовков задаёт схему
Первая строка считается заголовком, а не данными. Два крайних случая обрабатываются, а не оставляются на удивление:
- Повторяющиеся имена——повторённый заголовок делается уникальным:
a,aстановитсяaиa_2. Без этого второй столбец молча перезаписал бы первый. - Пустые имена——пустая ячейка заголовка именуется по позиции:
column 1,column 2и так далее, чтобы ключ не оказывался пустой строкой.
Определение типов по умолчанию выключено——намеренно
В CSV нет типов. Каждая ячейка — текст, и файл сам не может отличить число от кода, который случайно состоит из цифр. Поэтому определение выключено по умолчанию: пока оно выключено, все значения остаются строками, и это точное прочтение файла.
Если включить, преобразуется только однозначное. Значение считается числом, когда его можно записать как число JSON — необязательный минус, цифры, необязательная дробная часть и необязательный порядок; true, false и null распознаются как сами себя. Ключевой момент: значение с ведущим нулём не преобразуется, потому что 007 и 02139 почти всегда идентификаторы — почтовые индексы, телефоны, номера счетов, артикулы. Огульное «сделать числом» тихо превратило бы 007 в 7 и испортило данные, а это правило — нет.
Поля в кавычках, запятые внутри и переводы строк
Чтение следует RFC 4180 — тому же правилу, по которому пишет страница «JSON в CSV». Поле в двойных кавычках может содержать разделитель, перевод строки или удвоенную двойную кавычку, которая читается обратно как одна. Так "Ada, Countess" — это одно значение с запятой, а значение в две строки остаётся одной ячейкой. Принимаются концы строк CRLF и LF, а ведущая метка порядка байтов UTF-8——невидимый U+FEFF, который добавляют Excel и некоторые экспортёры,——удаляется, поэтому первое имя столбца не становится id.
Строки не той длины
Файлы, отредактированные вручную, редко бывают ровным прямоугольником. Строка с меньшим числом полей дополняется пустыми значениями, с большим — обрезается, поэтому у каждого объекта одинаковый набор ключей. Альтернатива — отклонить весь файл — менее полезна, чем вернуть корректные строки, но отсутствующих значений в выводе действительно нет.
Частые вопросы
Как CSV сопоставляется с объектами JSON?
Первая строка читается как заголовок, и её ячейки становятся именами свойств; каждая следующая строка становится объектом в массиве с этими ключами. CSV с заголовком id,name и одной строкой 1,Ada даёт [{ "id": "1", "name": "Ada" }].
Почему числа и логические значения становятся строками?
Определение типов по умолчанию выключено, и это намеренно. В CSV нет типов, поэтому инструмент не может знать, 007 — это число семь или код ноль-ноль-семь; неверная догадка молча испортит идентификаторы вроде почтовых индексов, телефонов и номеров счетов. Включайте определение, когда уверены, что столбец числовой, и даже тогда значение с ведущим нулём останется строкой.
Что именно считается числом при включённом определении?
Только текст, который можно записать как число JSON: необязательный минус, цифры без ведущего нуля (кроме значения ровно 0), необязательная дробная часть и необязательный порядок. true, false и null тоже распознаются. Всё остальное, включая 007 и 1,234, остаётся строкой.
Как читаются поля в кавычках, запятые внутри и переводы строк?
Разбор следует RFC 4180: поле в двойных кавычках может содержать разделитель, перевод строки или удвоенную двойную кавычку, которая читается обратно как одна. Так ячейка со значением Ada, Countess записывается как "Ada, Countess", а значение в две строки остаётся одним полем. Принимаются концы строк CRLF и LF.
В файле есть BOM UTF-8 — не сломается ли первое имя столбца?
Нет. Ведущая метка порядка байтов——невидимый U+FEFF, который некоторые инструменты, включая Excel, ставят в начало CSV,——удаляется перед разбором, иначе первый заголовок читался бы как id. Здесь он читается как id.
Что происходит со строками, не совпадающими с заголовком?
Строка с меньшим числом полей дополняется пустыми значениями, а с большим — обрезается, поэтому у каждого объекта одинаковый набор ключей. Неровные строки часто встречаются в файлах, отредактированных вручную, и здесь они принимаются, а не отклоняются, но отсутствующие данные действительно не попадают в вывод.
Нужно обратное направление? JSON в CSV записывает массив объектов как таблицу. Нашли ошибку? Свяжитесь с нами.