Все статьи

JSON ↔ YAML/CSV/XML/TOML: когда и зачем конвертировать

Когда экспортируешь данные из JSON в CSV для Excel с русской локалью, числа с точкой вроде 3.14 внезапно превращаются в текст или ломают разбор по столбцам — потому что русская Windows и русский Excel по умолчанию ждут запятую как десятичный разделитель, а запятую-разделитель полей CSV заменяют точкой с запятой.

Из чего состоят форматы

  • YAML — отступы вместо скобок, стандарт для конфигов CI/CD, Kubernetes, Docker Compose.
  • CSV — плоская таблица, но с региональными вариациями разделителя (запятая vs точка с запятой).
  • XML — атрибуты и пространства имён, до сих пор используется в SOAP-сервисах старых корпоративных и банковских систем.
  • TOML — однозначный формат конфигов, популярен в экосистеме Rust (Cargo.toml).

Почему CSV из этого конвертера может «разъехаться» в русском Excel

Excel определяет разделитель CSV по региональным настройкам системы. Если Windows настроена на русскую локаль, где запятая — это десятичный разделитель, Excel автоматически ожидает точку с запятой (;) между полями CSV, а не запятую. Экспортированный этим инструментом файл с запятыми при открытии двойным щелчком может показаться одной длинной колонкой — решается выбором точки с запятой в настройках делимитера перед конвертацией.

Ловушка автотипизации в YAML

YAML-парсер угадывает тип значения без кавычек: version: 1.20 может стать числом 1.2, потеряв конечный ноль, а строка NO (например, двухбуквенный код Норвегии по ISO 3166) в YAML 1.1 интерпретируется как булево false. Эта реальная проблема настолько известна, что в сообществе её называют «Norway problem» — она ломала списки стран в конфигах, где Норвегия неожиданно исчезала. Значения, которые должны остаться строкой, стоит явно брать в кавычки перед конвертацией.

Зачем это нужно

  • Перенести конфигурацию между инструментами, один из которых ждёт YAML, а другой — JSON.
  • Выгрузить данные API в CSV для анализа в Excel или Google Таблицах.
  • Состыковать систему на XML/SOAP с современным JSON-based API.
Попробовать инструмент