В этой статье
Что такое TOML?
TOML (Tom's Obvious Minimal Language) — это формат конфигурационных файлов, созданный для удобного чтения и написания. Разработанный Томом Престоном-Вернером (сооснователем GitHub) в 2013 году, TOML однозначно отображается в хеш-таблицу, что упрощает его парсинг в структуры данных на любом языке программирования. Его чистый синтаксис приоритизирует читаемость для человека над гибкостью.
В отличие от YAML, который полагается на отступы и имеет множество подводных камней, или JSON, который не поддерживает комментарии и завершающие запятые, TOML предлагает золотую середину: явную типизацию (строки, целые числа, числа с плавающей запятой, булевы значения, даты), понятный синтаксис таблиц с [скобками] и поддержку встроенных таблиц и массивов — всё без неоднозначности, которая присуща другим конфигурационным форматам.
Как работает конвертация TOML в JSON
Конвертация между TOML и JSON включает парсинг исходного формата в промежуточную структуру данных и сериализацию её в целевой формат. Каждый тип TOML напрямую соответствует эквиваленту JSON.
- Пары ключ-значение — синтаксис ключ = значение TOML соответствует свойствам объектов JSON; ключи с точкой, такие как server.port, становятся вложенными объектами
- Таблицы и массивы — заголовки [таблица] TOML становятся объектами JSON, а [[массив-таблиц]] становятся массивами объектов JSON, сохраняя иерархическую структуру
- Система типов — нативные типы TOML (строка, целое, дробное, булево, datetime) соответствуют примитивам JSON; значения datetime сериализуются как строки ISO 8601, поскольку JSON не имеет типа даты
Попробуйте бесплатно — без регистрации
Конвертировать TOML в JSON →Где используется TOML
TOML был принят несколькими крупными экосистемами как предпочтительный формат конфигурации благодаря своей ясности и строгости.
- Экосистема Rust — Cargo.toml является манифестом пакета для каждого проекта Rust, определяющим зависимости, настройки сборки и метаданные в формате, удобном для редактирования человеком и парсинга машиной
- Пакетирование Python — pyproject.toml (PEP 518/621) стал стандартом для конфигурации проектов Python, заменив setup.py и setup.cfg более чистым декларативным форматом
- Генераторы статических сайтов — Hugo использует config.toml для конфигурации сайта, и многие другие инструменты (Deno, InfluxDB, Netlify) используют TOML для своих конфигурационных файлов
Часто задаваемые вопросы
В чём различия между TOML, YAML и JSON для конфигурации?
JSON самый простой, но не поддерживает комментарии и завершающие запятые, что делает его неудобным для конфигурационных файлов, редактируемых людьми. YAML поддерживает комментарии и визуально чистый, но его синтаксис на основе отступов приводит к тонким ошибкам. TOML поддерживает комментарии, имеет явную типизацию и избегает парсинга на основе отступов.
Какие ограничения у TOML?
TOML может стать многословным для глубоко вложенных структур, поскольку каждый уровень вложенности требует собственного заголовка [таблица.подтаблица]. У него также нет типа null (в отличие от JSON и YAML), что означает отсутствующие значения нужно обрабатывать полным пропуском ключа.
Как TOML обрабатывает даты и время?
TOML имеет первоклассную поддержку типов даты и времени по RFC 3339: datetime со смещением (2024-01-15T10:30:00Z), локальный datetime (2024-01-15T10:30:00), локальная дата (2024-01-15) и локальное время (10:30:00). При конвертации в JSON они сериализуются как строки ISO 8601, поскольку JSON не имеет нативного типа даты.