TOML-конфигурация (.toml)
Спецификация СтандартTom's Obvious Minimal Language (TOML) - это однозначный, ориентированный на человека формат конфигурации, созданный сооснователем GitHub Томом Престоном-Вернером и широко принятый в современных экосистемах программирования, включая Rust (Cargo) и Python (pyproject.toml).
Конвертировать из TOML в JSON
Бесплатный конвертер из TOML в JSON прямо в браузере. Конвертируйте файлы мгновенно на вашем устройстве.
Анализ и метаданные
Операционные системы и анализаторы файлов идентифицируют файлы TOML по начальной двоичной последовательности байтов:
Сигнатура заголовка на уровне байтов (Magic Bytes)
Операционные системы и анализаторы файлов идентифицируют файлы TOML по начальной двоичной последовательности байтов:
HEX-СИГНАТУРА (СМЕЩЕНИЕ 0):
5B ... 5DПРЕДСТАВЛЕНИЕ ASCII: [...]
Стандартизация: Спецификация TOML v1.0.0
Технические спецификации
| Архитектура контейнера | Читаемый человеком конфигурационный файл, однозначно отображаемый в хэш-таблицу, структурирован с помощью [таблиц] и пар ключ = значение |
| Сжатие | Несжатый текстовый поток |
| Порядок байтов (Endianness) | Текстовый поток UTF-8 |
| Цветовые пространства | Н/Д (Конфигурационный файл) |
| Каналы и структура | Таблицы, массивы таблиц, встроенные таблицы, строки, целые числа, числа с плавающей точкой, логические значения и даты/время по RFC 3339 |
| Макс. габариты | Неограниченная длина текста |
| Прозрачность | Отсутствует |
| Потоковая передача и прогрессивная загрузка | Построчный последовательный разбор конфигурации |
Техническая матрица сравнения: TOML против конкурентов
| Технический атрибут | TOML (Текущий) | YAML | JSON | INI |
|---|---|---|---|---|
| Риск двусмысленности | Нулевой (строго однозначная спецификация) | Высокий (логические ошибки «норвежской проблемы» в YAML) | Нулевой (строгие типы данных) | Умеренный (нет формального стандарта) |
| Встроенные типы даты и времени | Встроенная поддержка дат и времени по RFC 3339 | Неявный синтаксический анализ строк и дат | Отсутствуют (только строки) | Отсутствуют (только строки) |
| Поддержка комментариев | Встроенная (комментарии #) | Встроенная (комментарии #) | Комментарии не допускаются | Встроенная (комментарии ; и #) |
| Основная экосистема | Rust (Cargo), Python (PEP 518), Go | Kubernetes, Ansible, CI/CD конвейеры | Веб-API, взаимодействие с браузером | Устаревшие ОС Windows, конфигурация Git |
Типичные режимы повреждения и руководство по восстановлению в HEX
Ошибка синтаксического анализа: 'Duplicate key in table' или 'Invalid table header'.
Первопричина: Попытка переопределить существующий ключ или пространство имен таблицы в документе.
Восстановление: Проверьте и переформатируйте синтаксис TOML с помощью модуля форматирования TOML в File2File.
Анализ безопасности и векторы атак на парсер
Анализаторы TOML должны защищаться от загрязнения прототипов (prototype pollution) и исчерпания ЦП из-за патологической вложенности массивов таблиц.
Известные векторы атак
- Загрязнение прототипов в анализаторах JavaScript TOML путем внедрения свойств в Object.prototype.
- Отказ в обслуживании (DoS) из-за глубоко вложенных объявлений массивов таблиц.
- Неограниченное выделение памяти во время синтаксического анализа массивных встроенных массивов.
Защитные лучшие практики: Проверяйте ограничения вложенности таблиц и используйте безопасные от загрязнения прототипов объекты словарей.
Исторические истоки и вехи
Ключевые преимущества и плюсы
- Полная однозначность: чисто и предсказуемо отображается в хэш-таблицу без неожиданного приведения типов.
- Первоклассная встроенная поддержка даты и времени (метки времени RFC 3339, даты, время) без экранирования строк.
- Принят в качестве официального стандартного формата конфигурации для современных инструментов разработки (Rust Cargo.toml, Python pyproject.toml).
Технические ограничения и минусы
- Глубоко вложенные многоуровневые деревья объектов могут быть более громоздкими по сравнению с YAML.
- Синтаксис для массивов таблиц ([[table.array]]) может быть интуитивно непонятен новичкам.
- Менее компактен, чем JSON, для высокопроизводительного межмашинного обмена данными через API.
Интересные технические факты
- TOML был создан Томом Престоном-Вернером, который также является сооснователем GitHub и создателем Gravatar и SemVer (семантического версионирования).
- Файл 'Cargo.toml' в каждом проекте Rust определяет все зависимости пакета и флаги компилятора в формате TOML.
- В отличие от JSON, TOML нативно поддерживает комментарии (с использованием символа '#') и многострочные строки.
Часто задаваемые технические вопросы
Для чего используется TOML?
TOML используется для конфигурации программного обеспечения, наиболее заметно в Cargo.toml в Rust, pyproject.toml в Python, конфигурациях Go Hugo и инструментах для работы с контейнерами.
Почему TOML предпочитают YAML для конфигурации?
TOML позволяет избежать печально известных ошибок синтаксического анализа YAML в граничных случаях (например, когда незакавыченное слово 'NO' превращается в булево значение false), оставаясь при этом удобным для человека благодаря комментариям и понятным таблицам.
Как конвертировать TOML в JSON или YAML?
Вы можете мгновенно конвертировать файлы TOML в JSON или YAML с помощью File2File.app прямо в своем веб-браузере.
Связанные пары конвертации TOML
Конвертация файлов конфигурации TOML в формат JSON переводит удобные для человека параметры свойств в строгий объект данных, который веб-приложения могут обрабатывать мгновенно.
Преобразование файлов конфигурации JSON в формат TOML упрощает ручное редактирование при сохранении всех структурных иерархий данных «ключ-значение».