CSV в JSON Когда конвертировать и как сохранять чистые данные

Опубликовано
CSV в JSON: Когда конвертировать и как сохранять чистые данные 1
Реклама · УДАЛИТЬ?

Большинство файлов 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

Хотите убрать рекламу? Откажитесь от рекламы сегодня

Установите наши расширения

Добавьте инструменты ввода-вывода в свой любимый браузер для мгновенного доступа и более быстрого поиска

в Расширение Chrome в Расширение края в Расширение Firefox в Расширение Opera

Табло результатов прибыло!

Табло результатов — это интересный способ следить за вашими играми, все данные хранятся в вашем браузере. Скоро появятся новые функции!

Реклама · УДАЛИТЬ?
Реклама · УДАЛИТЬ?
Реклама · УДАЛИТЬ?

новости с техническими моментами

Примите участие

Помогите нам продолжать предоставлять ценные бесплатные инструменты

Купи мне кофе
Реклама · УДАЛИТЬ?