ДокументыИзображенияМедиаИнструменты PDF

Конвертер JSON в TOML Online

Конвертируйте JSON в TOML (Cargo.toml, Hugo, Netlify) бесплатно, прямо в браузере.

title = "My Project"
version = "1.0.0"
features = ["async", "json"]

[dependencies]
serde = "1.0"
tokio = "1.28"

[[authors]]
name = "John"
email = "john@example.com"
Processed in your browser

JSON в TOML для Rust, Hugo и современной конфигурации

Cargo.toml для Rust

Конвертируйте зависимости или конфигурацию JSON в стандартный формат манифеста крейтов Rust.

Hugo и Netlify

Front matter и конфигурация для сайтов Hugo, netlify.toml и настройки CI/CD.

pyproject.toml (PEP 518)

Переносите конфигурацию Python-проектов из JSON в стандартный формат pyproject.toml.

100% конфиденциально

Конвертация выполняется в браузере. Ваш код и конфигурация не покидают устройство.

Три шага — никаких сложностей

1

Вставьте или загрузите JSON

Вставьте содержимое JSON в редактор или загрузите файл .json. Без регистрации, без ограничений.

2

Автоматическая конвертация

JSON преобразуется в валидный синтаксис TOML в браузере. Без серверов, без передачи данных.

3

Скопируйте или скачайте TOML

TOML готов к использованию как Cargo.toml, конфигурация Hugo, netlify.toml или pyproject.toml.

Остались вопросы?

TOML (Tom's Obvious, Minimal Language) создан Томом Престон-Вернером, сооснователем GitHub, в 2013 году. Он разработал формат, считая YAML слишком неоднозначным, а JSON — слишком многословным и неудобным для ручного редактирования в качестве конфигурации. TOML достиг версии 1.0 в январе 2021 года после многолетней разработки и ревизий. Цель — формат конфигурации, очевидный для чтения человеком и однозначно разбираемый машиной. Сегодня он является стандартным форматом конфигурации экосистемы Rust (Cargo.toml), генератора статических сайтов Hugo и определён как официальный формат метаданных пакетов Python в PEP 518 (pyproject.toml).

JSON точен и универсален, но неудобен для ручного написания конфигураций: не допускает комментариев, требует кавычек для всех ключей, запрещает завершающие запятые. YAML более читаем, но имеет сложную спецификацию со множеством способов выразить одно и то же, а ошибки отступа могут незаметно изменить смысл файла. TOML занимает промежуточное положение: использует синтаксис разделов [таблица] и ключ = значение, знакомый каждому, кто редактировал .ini-файлы, поддерживает комментарии #, не зависит от отступов и имеет компактную спецификацию (версия 1.0 — менее 5000 слов). Ограничение TOML — он плохо подходит для глубоко вложенных данных или структур общего назначения.

Cargo.toml — файл манифеста каждого крейта (пакета) в Rust. Он определяет имя пакета, версию по semver, авторов, редакцию Rust и зависимости. В секции [dependencies] объявляются внешние библиотеки с их версиями: например, serde = { version = "1.0", features = ["derive"] }. Cargo — менеджер пакетов Rust — читает этот файл для разрешения дерева зависимостей, их скачивания с crates.io и компиляции проекта. Если у вас конфигурация зависимостей в JSON и нужно перенести её в Rust-проект, этот конвертер сгенерирует корректный TOML.

Hugo, генератор статических сайтов на Go, поддерживает три формата front matter для страниц контента: YAML (разделитель ---), TOML (разделитель +++) и JSON (разделитель { }). TOML front matter в Hugo выглядит так: +++\ntitle = "Моя статья"\ndate = 2024-01-15T10:00:00Z\ntags = ["go", "hugo"]\ndraft = false\n+++. Если у вас front matter в JSON и нужно перевести его в TOML-конвенцию, предпочитаемую многими темами Hugo, этот конвертер выполнит преобразование за секунды.

pyproject.toml — стандартный конфигурационный файл проектов Python, определённый в PEP 518 (2016) и расширенный в PEP 517, PEP 621 и PEP 660. Заменяет устаревшие setup.py и setup.cfg единым декларативным файлом. Управляющий совет Python выбрал TOML после оценки YAML, JSON и других форматов: YAML был отклонён из-за сложной спецификации и неожиданного поведения, JSON — из-за отсутствия комментариев. Секция [build-system] определяет бэкенд сборки, [project] — метаданные пакета, [tool.ruff] или [tool.mypy] — конфигурацию инструментов разработки.

TOML хорошо обрабатывает вложенность двух-трёх уровней через таблицы: [database.server] создаёт вложенный объект. Для более глубокой вложенности используются встроенные таблицы: { host = "localhost", port = 5432 }. Однако JSON с объектами, вложенными более чем на три-четыре уровня, может стать многословным и неестественным в TOML. Конкретный случай, с которым TOML справляется неизящно, — массив объектов с несколькими свойствами: для этого требуется синтаксис [[таблица.массив]] с повторяющимися секциями. Если ваш JSON имеет глубоко вложенные структуры для данных, а не конфигурации, рассмотрите YAML как целевой формат.

Конвертировать JSON в TOML: Cargo.toml, Hugo, Netlify и pyproject.toml

TOML (Tom's Obvious, Minimal Language) создан в 2013 году Томом Престон-Вернером — сооснователем GitHub, создателем Jekyll и автором спецификации Semantic Versioning на semver.org. Формат разрабатывался как прямой и аргументированный ответ на недостатки существующих форматов конфигурации. YAML, несмотря на поверхностную читаемость, имеет спецификацию более 80 страниц с множеством эквивалентных и часто неожиданных способов представить одно и то же — неявная типизация, множественные потоки документов, якоря и псевдонимы, литеральные и складные блочные скаляры. Файл YAML с некорректными отступами может полностью изменить смысл, не генерируя ошибки разбора, что опасно в конфигурациях инфраструктуры. JSON точен и универсален, но имеет критические ограничения для конфигураций, написанных и поддерживаемых людьми: не допускает комментариев ни в каком виде, требует двойных кавычек для всех ключей даже при простых идентификаторах, запрещает завершающие запятые и не предлагает удобного синтаксиса для иерархических разделов. TOML решает все эти проблемы, используя разделы [таблица] и синтаксис ключ = "значение", поддерживает комментарии с символом #, не зависит от отступов и имеет полную, однозначную спецификацию, достигшую стабильной версии 1.0.0 в январе 2021 года после восьми лет итеративной разработки.

Крупнейшей и наиболее активной экосистемой TOML на практике является Rust с его менеджером пакетов Cargo. Cargo, официальная система сборки и менеджер пакетов Rust (часть тулчейна с первого стабильного релиза Rust в мае 2015 года), использует Cargo.toml как формат манифеста для каждого крейта. Типичный файл содержит секцию [package] с именем, версией, авторами, редакцией и описанием; [dependencies] с производственными зависимостями; [dev-dependencies] для тестирования; [build-dependencies] для скриптов сборки; [features] для опциональных возможностей крейта. Реестр crates.io содержит более 140 000 опубликованных крейтов, каждый с Cargo.toml. Netlify использует TOML для файла netlify.toml, определяющего правила сборки, пользовательские HTTP-заголовки, правила редиректов и перезаписи, конфигурацию serverless-функций и переменные окружения по контексту развёртывания. Hugo использует TOML как один из трёх поддерживаемых форматов front matter и для файлов конфигурации сайта.

Python принял TOML как официальный формат конфигурации проектов через серию PEP, охватывающих период с 2016 года по настоящее время. PEP 518 (май 2016) ввёл pyproject.toml с секцией [build-system] для бэкенда сборки. PEP 517 формализовал интерфейс между pip/build и бэкендами (setuptools, flit, hatch, poetry). PEP 621 стандартизировал метаданные пакета в [project]. Секции [tool.X] позволяют каждому инструменту хранить конфигурацию без конфликтов: [tool.ruff], [tool.mypy], [tool.pytest.ini_options], [tool.black], [tool.isort]. До pyproject.toml конфигурация типичного Python-проекта была разбросана по setup.py, setup.cfg, tox.ini, .flake8, mypy.ini и другим файлам — по одному на инструмент, с разными форматами и часто дублированием метаданных. pyproject.toml унифицировал всё в едином декларативном, читаемом и аннотируемом файле. Конвертация программно сгенерированных данных конфигурации из JSON в TOML — естественный шаг, когда эта конфигурация требует постоянного ручного сопровождения и проверки.