Как вытащить данные из таблиц, не сходя с ума
CSV, JSON, Excel — конвертация между форматами без того, чтобы всё сломать.
Кто-то отправляет тебе Excel-файл по электронной почте. Твоему приложению нужен JSON. Это должно быть просто.
Но никогда не бывает.
В таблице объединённые ячейки. Или даты, отформатированные странно. Или та самая колонка, где кто-то напечатал "N/A" в том, что должно быть числовым полем. Каждая конвертация превращается в сессию отладки.
Вот как сделать это менее болезненным.
CSV: Универсальный переводчик
Почти каждое табличное приложение экспортирует в CSV. Почти каждая система может читать CSV. Это наименьший общий знаменатель форматов данных.
CSV — это просто текст: значения, разделённые запятыми, строки, разделённые переносами.
name,email,age
John,john@example.com,32
Jane,jane@example.com,28
Просто. Пока не станет не просто.
Проблема запятой. Что если значение содержит запятую? "Smith, John" как имя ломает парсинг. Решение: оборачивай значения в кавычки. Хорошие CSV-инструменты обрабатывают это автоматически. Плохие — нет.
Проблема переноса строки. Что если значение содержит перенос строки? То же решение: кавычки. То же предупреждение: не все инструменты обрабатывают это.
Проблема кодировки. Excel на Windows по умолчанию использует другую кодировку символов, чем Excel на Mac. Специальные символы повреждаются. Экспортируй как "CSV UTF-8", когда возможно.
JSON: Что на самом деле хотят API
Веб-приложения предпочитают JSON:
[
{"name": "John", "email": "john@example.com", "age": 32},
{"name": "Jane", "email": "jane@example.com", "age": 28}
]
Конвертация из CSV в JSON обычно прямолинейна. Первая строка становится именами свойств, последующие строки становятся объектами.
Проблемы возникают, когда:
Типы теряются. CSV — это всё строки. "32" может быть числом или текстом. JSON-конвертация должна угадывать. Большинство инструментов предполагают: выглядит как число, вероятно, число.
Null неоднозначны. Пустая ячейка = null? Пустая строка? Вообще опустить свойство? Разные инструменты решают по-разному.
Массивов не существует. CSV плоский. Если твоему JSON нужны вложенные массивы, тебе придётся делать ручную работу.
Общий рабочий процесс
- Экспортируй из Excel/Sheets как CSV
- Открой в текстовом редакторе, проверь на очевидные проблемы
- Конвертируй в JSON
- Валидируй структуру JSON
- Точечно проверь несколько записей
Точечная проверка важна. Автоматическая конвертация может молча повредить данные. Дата становится числом. Почтовый индекс теряет ведущий ноль. "O'Brien" становится "O'Brien". Проверяй перед доверием.
Обработка странных данных
Даты. Excel хранит даты как числа внутренне. Экспорт может производить "44927" вместо "2023-01-15". Знай свой формат даты перед конвертацией.
Числа как текст. Почтовые индексы, телефонные номера, ID — они выглядят как числа, но не должны обрабатываться как числа. Ведущие нули важны. Конвертируй в строку явно.
Unicode. Имена с диакритическими знаками, данные на нелатинских скриптах. Убедись, что твой пайплайн обрабатывает UTF-8 от начала до конца.
Идти в другую сторону
JSON в CSV теряет информацию. Вложенные объекты сплющиваются неудобно. Массивы становятся... чем, собственно? Несколькими строками? Конкатенированными строками?
Для плоского JSON с консистентной структурой конвертация работает хорошо. Для сложных вложенных данных ты принимаешь решения о том, как их сплющить. Документируй эти решения.
YAML и XML
YAML — хипстерский кузен JSON. Более читабельный, та же структура данных, легко конвертируется между ними.
XML — это корпоративная версия. Многословный, широко поддерживается старыми системами, требует больше усилий для парсинга.
Оба конвертируются в JSON и обратно. Главная головная боль — это атрибуты vs элементы в XML — в JSON нет такого различия.
Конвертация данных — это знание того, что может пойти не так, и проверка на это. Автоматизируй конвертацию, проверяй результаты и никогда не доверяй, что "просто работает".