Конвертер CSV в JSON
Загрузите файл CSV или вставьте данные для конвертации в формат JSON
Перетащите файл CSV сюда или нажмите для выбора
Что такое CSV в JSON?
CSV в JSON — это онлайн-инструмент конвертации форматов данных, который преобразует данные CSV (значения, разделённые запятыми) в формат JSON (обозначение объектов JavaScript).
CSV — это распространённый табличный формат данных, широко используемый в электронных таблицах и экспорте баз данных. JSON — самый популярный формат обмена данными в современных веб-приложениях, известный своей чёткой структурой и простотой разбора.
С помощью этого инструмента вы можете быстро конвертировать данные CSV в массивы или объекты JSON для использования в программировании и обработке данных.
CSV to JSON выглядит простым, но delimiter, quotes, переносы строк внутри полей, пустые значения и encoding определяют надежность результата. Заголовки столбцов обычно становятся JSON keys, поэтому дубликаты и неясные имена лучше очистить заранее. Для APIs, imports, analytics и migrations нужно дополнительно проверить типы, number formats, dates, null rules и строки с неправильным числом колонок.Как использовать
Как использовать
- Вставьте или введите CSV-данные в левую панель ввода
- Выберите нужный разделитель (по умолчанию — запятая)
- Выберите, использовать ли первую строку в качестве имён полей
- На правой панели автоматически появится результат в формате JSON
Особенности разбора CSV
- Перед использованием JSON-вывода проверьте разделитель, обработку кавычек и настройку строки заголовка.
- Большие CSV-файлы могут содержать пустые строки, запятые или переносы строк внутри ячеек в кавычках — после конвертации просмотрите несколько строк.
Применение
Технический принцип
Разбор CSV следует грамматике IETF RFC 4180: каждая запись завершается CRLF (некоторые диалекты принимают LF или CR), каждая запись содержит поля, разделённые разделителем (запятая в RFC, но TSV, точка с запятой и вертикальная черта — широко распространённые варианты), и любое поле, содержащее разделитель, CR, LF или двойную кавычку, ДОЛЖНО быть обёрнуто в двойные кавычки с экранированием внутренних двойных кавычек удвоением (Hello "world" становится "Hello ""world"""). Парсер на этой странице — это конечный автомат с четырьмя состояниями: field_start, in_unquoted, in_quoted, after_quote — и обрабатывает ввод за один проход O(n) по потоку символов, поэтому CSV на 10 МБ со 100 000 строк обрабатывается значительно меньше секунды на типовом ноутбуке без промежуточного выделения массива токенов на каждую строку. Кодировка требует явной обработки: UTF-8 BOM (EF BB BF) в начале файла удаляется перед разбором, иначе первое имя заголовка незаметно начнётся с невидимого кодового пункта U+FEFF, и проверки равенства в downstream JSON.parse будут провалены. Экспорт Excel на Windows по-прежнему выдаёт CRLF и часто UTF-8 с BOM, тогда как macOS Numbers и большинство утилит Unix по умолчанию используют LF без BOM. Европейские таблицы часто экспортируют файлы с разделителем точка с запятой, поскольку запятая является десятичным разделителем во многих локалях (49,90 EUR, а не 49.90), поэтому селектор разделителя по умолчанию — запятая, но табуляция, точка с запятой и вертикальная черта представлены как варианты первого уровня. Переключатель «первая строка — заголовок» меняет форму вывода с массива объектов (ключи заголовков -> строковые значения) на массив массивов, соответствующий двум распространённым паттернам загрузки для downstream-кода. Значения полей выводятся как строки, а не как выведенные типы — CSV не имеет схемы, поэтому 01234 (ID с ведущими нулями), 1e10 (строка, похожая на номер телефона, которую JSON.parse приведёт к числу) и 2024-13-45 (некорректная дата) остаются дословно. Это намеренно: типизированный API может применить zod, Joi или собственный слой приведения с явными правилами, но он не может восстановить ведущий ноль, который конвертер уже удалил. Вывод генерируется через JSON.stringify(rows, null, 2) и отображается через подсветку синтаксиса; исходный CSV считывается с помощью FileReader.readAsText() из Blob, никогда не загружается на сервер, поэтому экспорт HR, финансовые журналы и списки клиентов можно преобразовать, не покидая сессию браузера.
- Грамматика RFC 4180: поля с разделителем/CR/LF/" должны быть в кавычках; внутренние кавычки удваиваются как "".
- Однопроходный конечный автомат O(n) с состояниями: field_start, in_unquoted, in_quoted, after_quote.
- UTF-8 BOM (EF BB BF / U+FEFF) удаляется в начале файла для чистоты ключей заголовков.
- Европейские таблицы часто используют ; как разделитель, поскольку , — десятичный знак в настройках локали.
- Первая строка как заголовок переключает вывод между Array<Record<string,string>> и Array<Array<string>>.
- Все значения полей остаются строками; ID с ведущими нулями вроде 01234 сохраняются только благодаря отсутствию вывода типов.
- FileReader.readAsText() обрабатывает Blob локально; ничего не загружается — безопасно для экспортов HR/финансов/staging.
Примеры
Базовый CSV со строкой заголовка -> JSON-массив объектов
CSV вход:
name,age,city
Alice,28,New York
Bob,35,London
Carol,42,Tokyo
JSON выход:
[
{ "name": "Alice", "age": "28", "city": "New York" },
{ "name": "Bob", "age": "35", "city": "London" },
{ "name": "Carol", "age": "42", "city": "Tokyo" }
]Поля в кавычках с запятыми внутри
CSV вход:
id,product,description
1,"Notebook, A5","Hard cover, 200 pages"
2,Pen,"Black ink, 0.5mm"
JSON выход:
[
{ "id": "1", "product": "Notebook, A5", "description": "Hard cover, 200 pages" },
{ "id": "2", "product": "Pen", "description": "Black ink, 0.5mm" }
]TSV (с разделителями-табуляциями) без заголовка
TSV вход (разделитель = Tab, заголовок отключён):
101 Alice 98.5
102 Bob 87.0
103 Carol 92.3
JSON выход:
[
["101", "Alice", "98.5"],
["102", "Bob", "87.0"],
["103", "Carol", "92.3"]
]Разделитель — точка с запятой (экспорт европейских таблиц)
CSV вход (разделитель = ;):
product;price_eur;stock
Keyboard;49,90;120
Mouse;19,90;345
JSON выход:
[
{ "product": "Keyboard", "price_eur": "49,90", "stock": "120" },
{ "product": "Mouse", "price_eur": "19,90", "stock": "345" }
]
Примечание: числа остаются строками — приводите типы в коде потребителя.Часто задаваемые вопросы
Какие варианты CSV поддерживаются?
Стандартный CSV по RFC 4180: разделитель — запятая, поля заключаются в двойные кавычки, экранирование — удвоением двойных кавычек. Файлы с табуляцией (TSV) и точкой с запятой работают через смену разделителя. Различные переводы строк (LF/CRLF/CR) обрабатываются автоматически.
Как обрабатываются заголовки?
Если включить «первая строка — заголовок», парсер использует каждую ячейку заголовка как ключ JSON для соответствующей колонки и выдаёт массив объектов. С отключёнными заголовками парсер выдаёт массив массивов. Пустые ячейки заголовков получают числовой ключ-заглушку.
Как определяются типы?
По умолчанию всё — строки. Включите «автотип», чтобы попытаться распознать числа, булевы значения (true/false) и null. Числа с ведущими нулями (00123, 0042) остаются строками, чтобы не потерять префикс — используйте это для ID и почтовых индексов.
Что если в поле есть запятая или перевод строки?
Заключите поле в двойные кавычки: "Smith, John" или "line one\nline two". Двойные кавычки внутри удваиваются: "He said ""hi""". Парсер обрабатывает все эти случаи; если строка ломается, причина обычно — несбалансированные кавычки.
Где выполняется конвертация — локально или на сервере?
Локально. Парсинг выполняется в вашем браузере на JavaScript. Вставленный CSV не покидает страницу. Большие файлы могут замедлить браузер; если вставка превышает десятки МБ, разбейте её перед обработкой.
Сохраняется ли порядок колонок?
Да — каждая строка становится JSON-объектом, порядок ключей которого совпадает с порядком заголовков CSV, и JSON.stringify в современных движках сохраняет порядок вставки. Если ваш downstream-инструмент читает JSON без сохранения порядка вставки — это его ограничение.
Как обрабатывать даты?
Даты остаются строками. Автотипизация не разбирает произвольные форматы дат, потому что не существует однозначного стандарта (1/2/2024 — это 2 января в США и 1 февраля в Европе). Перед импортом приводите даты к ISO 8601 (YYYY-MM-DD), если на выходе нужны нативные объекты Date.