Большинство файлов CSV приходят в беспорядке. В них есть пустые ячейки, где должны быть отсутствующие значения, непостоянные кавычки и отсутствует принудительная схема. Конвертация такого сырого данных в чистый JSON — это не просто изменение формата, это задача очистки данных.
Этот гайд охватывает моменты, когда стоит перейти на новый формат, что может пойти не так при конвертации и как правильно обрабатывать крайние случаи — либо с помощью быстрого Конвертер CSV в JSON либо с помощью собственного скрипта.
CSV против JSON: Честная компромиссная ситуация
CSV компактен, универсально читаем и легко импортируется в таблицы. Для плоских таблицарных данных — экспорта из баз данных, аналитических потоков, финансовых записей — это по-прежнему правильный формат. Если ваша структура данных состоит из строк и столбцов без вложенности, CSV подойдёт.
JSON становится лучшим выбором в следующих случаях:
- Ваша структура данных включает вложенность или иерархию (например, пользователь с несколькими адресами)
- Вы нуждаетесь в явной информации о типе данных (число 42 против строки «42»)
- Вы передаёте данные в API или в приложение на JavaScript
- Вы хотите явно представлять отсутствующие значения, а не просто пустые ячейки
Компромисс не заключается в том, какой формат лучше. Он заключается в том, насколько ваша структура выходит за рамки того, что может представить CSV.
Проблемы, которые создаёт CSV
Перед конвертацией необходимо понять, что именно сломано.
Отсутствует стандарт для отсутствующих значений. Пустая ячейка в CSV может означать отсутствие значения, ноль, пустую строку или отсутствующие данные. Из файла невозможно определить, что именно означает пустая ячейка. Пустой столбец может означать «неизвестно» в одной системе и «0» в другой. age Непостоянные кавычки.
Значения с запятыми должны быть заключены в двойные кавычки ( ), но не все экспортеры следуют этому стандарту. Вы найдёте запятые без кавычек, несоответствующие кавычки и ячейки, которые открываются кавычку, но не закрываются."Portland, OR"Проблемы с кодировкой.
Файлы CSV часто приходят с BOM UTF-8, символами Windows-1252 или их комбинацией. Смешанные кавычки, тире и акценты вызывают проблемы у парсеров, ожидая чистого ASCII. Отсутствие информации о типах.
Каждое значение в CSV хранится как строка. Число 42, логическое значение true и дата 2024-01-01 хранятся как текст. Прямое преобразование в JSON даёт документ, полный строк, где ожидались числа и логические значения. Как правильно выполнить конвертацию
Механика проста: каждая строка CSV становится объектом JSON, с заголовками столбцов как ключами. Проблема заключается во всех действиях, происходящих до и после этого преобразования.
Преобразование типов.
Столбец, содержащий целые числа, должен превращаться в числа JSON. Столбец с значениями «true»/«false» должен превращаться в логические значения. Но столбец с ZIP-кодом, который выглядит как целое число (90210), должен оставаться строкой — преобразование его уничтожает ведущие нули. Обработка отсутствующих значений.
Пустые ячейки требуют решения: преобразовать в , пропустить ключ полностью или использовать значение по умолчанию. Выберите одно и оставайтесь последовательными. nullОтсутствующие поля.
Если одна строка имеет меньше столбцов, чем заголовок, ваш парсер должен обрабатывать это гибко — либо заполняя значениями либо пропуская строку. null Вот пример Python-скрипта, который обрабатывает все три случая:
Кодировка удаляет BOM, если он присутствует.
import csv
import json
def coerce_value(value):
if value == '':
return None
try:
return int(value)
except ValueError:
pass
try:
return float(value)
except ValueError:
pass
if value.lower() in ('true', 'false'):
return value.lower() == 'true'
return value
def csv_to_json(csv_path, json_path):
with open(csv_path, encoding='utf-8-sig') as f: # utf-8-sig strips BOM
reader = csv.DictReader(f)
rows = []
for row in reader:
rows.append({k: coerce_value(v) for k, v in row.items() if k})
with open(json_path, 'w', encoding='utf-8') as f:
json.dump(rows, f, indent=2, ensure_ascii=False)
csv_to_json('input.csv', 'output.json')
The utf-8-sig Пытается преобразовать числовые значения в порядке: сначала целое число, затем дробное, затем логическое значение, затем строку. А coerce_value фильтр удаляет фальшивые столбцы, вызванные запятыми в заголовке. if k Вложенность JSON из плоского CSV
CSV не может напрямую представлять вложенность, но есть два распространённых подхода.
Обозначение с помощью точек.
Некоторые экспорты CSV используют заголовки вроде . После обработки шаг разделяет на точки и создаёт вложенные объекты: address.city и address.zipГруппировка и вложенность.
def unflatten(row):
result = {}
for key, value in row.items():
parts = key.split('.')
d = result
for part in parts[:-1]:
d = d.setdefault(part, {})
d[parts[-1]] = value
return result
Если несколько строк представляют дочерние элементы одного родительского элемента (например, строки заказа под заказом), группируйте по идентификатору родителя и создавайте вложенный массив после конвертации. Ни один из этих подходов не должен быть частью быстрого преобразования — если вы делаете это, вы пишете трансформационный скрипт, а не просто меняете формат. Какой инструмент использовать
Для чистого, хорошо структурированного CSV, который требует только изменения формата: используйте онлайн
. Вставьте, преобразуйте, закончите. Без настройки, без зависимостей. Конвертер CSV в JSONДля CSV с известными проблемами — проблемами кодировки, непостоянными кавычками, преобразованием типов или отсутствующими значениями — напишите скрипт. Приведённый выше пример Python-скрипта решает большинство реальных случаев. pandas — тоже вариант (
), но он делает собственные решения по преобразованию, которые могут не соответствовать вашим ожиданиям.pd.read_csv() + df.to_json()Для одноразовых команд в терминале,
Miller ) — самый быстрый путь: (mlrMiller корректно обрабатывает кавычки, кодировку и отсутствующие поля по умолчанию. Это самый быстрый путь от проблемного CSV к чистому JSON без написания кода.
mlr --icsv --ojson cat input.csv > output.json
Крайние случаи CSV и как с ними работать
Проблема CSV
| Что получается в JSON | Как с этим работать | Пустая ячейка |
|---|---|---|
| или отсутствующий ключ | null Решение заранее; последовательность во всех строках | Строка, выглядящая как число (ZIP-код) |
| Потеря ведущих нулей при преобразовании | Оставить как строку; преобразовывать только столбцы, которые вы контролируете | Запятая в конце заголовка |
| Пустой ключ | на каждой строке "" Фильтрация с помощью | при создании объектов if k UTF-8 BOM в начале файла |
| Ошибка парсинга или | в первом ключе Открывать с помощью | Внутри ячейки кавычка с новой строкой encoding='utf-8-sig' |
| Разрушает простые парсеры по строкам | Использовать настоящий парсер CSV, а не | в логическом столбце split(',') |
"true"/"false" строка, а не | "true" логическое значение true Явное преобразование после приведения к нижнему регистру | Изменение формата — легко. Данные — нет. |
Конвертер CSV в JSON обрабатывает структурную часть за несколько секунд. Трудность заключается в понимании того, что на самом деле содержится в вашем файле — отсутствующие значения, проблемы с кодировкой, столбцы, которые выглядят как числа, но не являются таковыми. Явно определяйте преобразование типов и обработку отсутствующих значений, а не доверяйте инструменту, который делает предположения, и вы избежите ошибок, возникающих из-за неверных данных.
CSV в JSON: Когда конвертировать и как сохранять чистые данные 2
Вам также может понравиться
Установите наши расширения
Добавьте инструменты ввода-вывода в свой любимый браузер для мгновенного доступа и более быстрого поиска
恵 Табло результатов прибыло!
Табло результатов — это интересный способ следить за вашими играми, все данные хранятся в вашем браузере. Скоро появятся новые функции!
Подписаться на новости
все Новые поступления
всеОбновлять: Наш последний инструмент Был добавлен 25 апреля 2026 года
