JSON в TOML

Бесплатный инструмент для быстрого преобразования JSON-объектов в конфигурацию TOML v1.0. Автоматически строит вложенные таблицы ([section]), подтаблицы ([a.b]) и массивы таблиц ([[items]]), поэтому им удобно готовить шаблоны Cargo.toml и pyproject.toml. Вся обработка выполняется локально в браузере.

Похожие

Что такое TOML и зачем конвертировать JSON в TOML?

TOML расшифровывается как Tom's Obvious, Minimal Language («очевидный минимальный язык Тома») — формат конфигурационных файлов, представленный сооснователем GitHub Томом Престон-Вернером в 2013 году. Цели дизайна: очевидный синтаксис, минимализм, удобство чтения для человека и однозначность формулировок. Версия TOML 1.0 стала стабильной в 2021 году (toml-lang/toml) и сегодня является форматом конфигов по умолчанию для Cargo (Rust), PEP 621 в Python (pyproject.toml), Hugo, Prettier, Deno, Taplo и многих других инструментов.

У TOML в сценарии конфигов есть несколько явных преимуществ перед JSON и YAML. ① Нет ловушки отступов YAML: в YAML иерархия задаётся отступами, и ошибка в отступе полностью меняет смысл конфига (например, list превращается в string). В TOML уровни объявляются явно через [table] — двусмысленности исключены. ② TOML удобнее JSON для конфигов: кавычки и фигурные скобки JSON в сложных конфигах утомительны, а TOML с key = value читается чище, плюс нативно поддерживает комментарии. ③ Строгая система типов: TOML различает integer, float, string, boolean, datetime, array и table — нет JSON-неоднозначности «число это integer или float» и нет проблемы Norway из YAML 1.1, где NO становится булевым false.

Ядро TOML составляют четыре конструкции. ① Пары ключ-значение (key = value) для базовых настроек. ② Таблицы (Table) — именованные группы, объявляемые через [name], с поддержкой вложенности ([a.b.c]). ③ Массивы таблиц (Array of Tables) — списки однотипных объектов через [[name]], часто используются для multi-environment конфигов, списков плагинов и зависимостей. ④ Массивы (Array) — базовые типы можно записывать inline ([1, 2, 3]) или многострочно. Инструмент при конвертации распознаёт структуру JSON и сам выбирает подходящий TOML-синтаксис.

Типичные причины перехода с JSON на TOML. ① Проект мигрирует с экосистемы Node.js на Rust/Python и конфиги нужно привести к TOML. ② Команда переводит разрозненные JSON-конфиги на TOML, чтобы избавиться от тяжёлой вложенности JSON за счёт секций [section]. ③ TOML заменяет YAML и устраняет странные баги из-за отступов. ④ В CI/CD входные JSON-метаданные нужно превращать в TOML для последующих шагов. Инструмент закрывает потребности во всех этих сценариях.

По сути конвертация — это отображение дерева синтаксиса: JSON.parse() превращает текст в JavaScript-объект (AST), затем идёт рекурсивный обход узлов — строки, числа, булевы значения и null превращаются в соответствующие TOML-скаляры, массивы разделяются на inline-массивы и массивы таблиц в зависимости от типа элементов, а вложенные объекты становятся таблицами или подтаблицами. На выходе — текст по правилам TOML. Такое структурное отображение гарантирует синтаксическую корректность результата на 100%.

Варианты использования

  • Когда нужно быстро подготовить черновик Cargo.toml для проекта на Rust
  • Когда вы переносите настройки проекта Python в pyproject.toml
  • Когда конфигурации Hugo, Deno или Prettier нужно перевести из JSON в TOML
  • Когда команда унифицирует формат CI/CD или DevOps-конфигов вокруг TOML
  • Когда хочется сравнить существующий JSON с TOML и выбрать более удобный формат
  • Когда вы изучаете синтаксис TOML и хотите увидеть реальные примеры вложенных таблиц и массивов таблиц

Как использовать

  1. Вставьте JSON в левый редактор или загрузите файл .json / .txt. При необходимости откройте готовый пример
  2. Инструмент сразу разберёт JSON и сгенерирует TOML v1.0 в правой панели
  3. Если появится ошибка синтаксиса, проверьте сообщение и при необходимости сначала исправьте JSON
  4. Скопируйте результат или скачайте его как config.toml для дальнейшего использования

Функции

  • Генерирует TOML по спецификации v1.0, который можно сразу использовать в Cargo, Poetry, Hugo, Prettier и других TOML-совместимых инструментах
  • Автоматически преобразует многоуровневые JSON-объекты в таблицы TOML вида [a] и [a.b.c], сохраняя читаемую структуру
  • Массивы объектов переводятся в массивы таблиц [[items]], что удобно для списков зависимостей, хостов и окружений
  • Экранирует кавычки, обратные слэши, переводы строк и табы по правилам TOML
  • Корректно сопоставляет строки, числа, булевы значения и null с типами TOML; null заменяется на пустую строку ""
  • Показывает результат в реальном времени: вставляете JSON слева и сразу видите TOML справа
  • Позволяет загрузить готовый пример со вложенностью, массивами и массивами таблиц для быстрой проверки
  • Поддерживает загрузку файлов .json / .txt и скачивание результата как config.toml
  • На ПК можно менять ширину панелей перетаскиванием, а последние 200 записей истории сохраняются автоматически
  • После конвертации можно перейти к форматированию JSON и продолжить очистку или проверку исходных данных
  • Всё выполняется локально в браузере, поэтому чувствительные конфигурации не отправляются на сервер

Часто задаваемые вопросы

Как преобразовать JSON в конфигурационный файл TOML?

Вставьте JSON в поле ввода слева — инструмент автоматически разберёт JSON-объект и преобразует его в конфиг по спецификации TOML v1.0. Пары ключ-значение превращаются в key = value, вложенные объекты — в таблицы TOML ([section]) и подтаблицы ([a.b]), а массивы автоматически становятся inline-массивами или массивами таблиц ([[items]]) в зависимости от содержимого. Нажмите кнопку «Пример», чтобы загрузить вложенный образец, а готовый результат можно скачать как config.toml для вашего проекта.

Для каких задач подходят TOML, YAML и JSON?

JSON идеален для обмена данными в API и передачи между фронтендом и бэкендом — это фактический стандарт для REST-интерфейсов. YAML подходит для сложных структур данных и CI/CD-конфигов (GitHub Actions, Ansible, Kubernetes): высокая читаемость, поддержка комментариев и нескольких документов. TOML отлично подходит для явных конфигурационных файлов (Rust/Cargo, Python pyproject, Hugo, Prettier): лаконичный синтаксис, минимум двусмысленностей, нет ловушек с отступами. Универсального победителя нет — для конфигов лучше TOML, для CI/CD — YAML, для API-данных — JSON.

Как в TOML представить вложенные JSON-объекты?

В TOML для вложенных структур используются таблицы (Table). Один уровень вложенности, например {"database": {"host": "localhost"}}, превращается в [database] host = "localhost". Многоуровневая вложенность вида {"server": {"ssl": {"enabled": true}}} даёт [server.ssl] enabled = true. Инструмент автоматически распознаёт уровень вложенности и формирует нужный путь в заголовке таблицы — ничего не нужно править вручную.

Как преобразуются JSON-массивы в TOML?

TOML различает два синтаксиса массивов. ① Массивы базовых типов (например, ["a", "b", 1, 2]) становятся inline-массивами key = ["a", "b", 1, 2] — элементы через запятую в квадратных скобках. ② Массивы объектов (например, [{"name": "primary"}, {"name": "replica"}]) превращаются в массивы таблиц [[items]] — перед каждым объектом добавляется заголовок [[items]], а поля идут ниже. Инструмент автоматически выбирает подходящий синтаксис TOML в зависимости от типа массива.

Можно ли использовать сгенерированный TOML сразу в Cargo.toml?

Да. Инструмент строго следует официальной спецификации TOML v1.0 (github.com/toml-lang/toml), и сгенерированный TOML сразу подходит для Cargo (менеджер пакетов Rust), Poetry/pyproject (Python), Hugo (статические сайты), Prettier, Deno, Taplo и любых других инструментов с поддержкой TOML. Обратите внимание: если в Cargo.toml нужны конкретные секции [package] / [dependencies], добавьте соответствующие поля (name, version, edition, таблицы зависимостей) вручную по правилам Cargo.

Во что превращаются значения null в JSON?

В TOML нет типа null, поэтому JSON-значение null превращается в пустую строку "" — это самое распространённое эквивалентное представление. Если ваш потребитель TOML предъявляет особые требования к null-полям (например, поле optional в [dependencies]), после конвертации поправьте соответствующую строку вручную.

Что происходит с двойными кавычками и переносами строк в строках?

Строки в TOML обязательно заключаются в двойные кавычки, а внутренние двойные кавычки, обратные слэши, переносы строк (\n), возврат каретки (\r) и табуляция (\t) должны экранироваться по правилам TOML. Инструмент делает это автоматически: например, He said "Hello" из JSON в TOML превращается в He said \"Hello\"\n, а переносы в многострочных строках становятся \n. Экранировать вручную не нужно — результат корректно читается любым TOML-парсером.

Поддерживает ли сгенерированный TOML типы даты и времени?

Инструмент принимает на вход только JSON, а в стандарте JSON нет нативного типа даты-времени (обычно используются строки ISO 8601 вида "2026-01-01T00:00:00Z"). После конвертации такие значения остаются строками (key = "2026-01-01T00:00:00Z"). Если вам нужны нативные TOML-типы local datetime / offset datetime, замените строку на голый TOML-литерал даты (например, 2026-01-01T00:00:00) вручную.

Конвертация идёт в браузере — данные куда-то отправляются?

Нет. И парсинг JSON, и генерация TOML, и экранирование строк выполняются локально в движке JavaScript вашего браузера — данные не уходят ни на какой сервер, инструмент работает и без интернета. Можно спокойно конвертировать JSON с паролями БД, API-ключами и внутренними адресами.

Устранение неполадок

JSON выдаёт «Unexpected token» — что делать?

Это синтаксическая ошибка JSON. Типичные причины: ① лишняя запятая в конце (trailing comma), например {"a":1,}; ② строки в одинарных кавычках вида {'a':1} (в JSON нужны двойные); ③ ключи без кавычек, например {a:1}; ④ комментарии // или /* */ (стандарт JSON их не поддерживает). Воспользуйтесь нашим инструментом исправления JSON — он автоматически исправит эти распространённые ошибки, а затем снова вставьте исправленный JSON.

Cargo выдаёт «invalid TOML» на сгенерированном файле — в чём дело?

Обычно это конфликт имён полей или отсутствие обязательных полей. TOML-парсеры очень строги к путям заголовков таблиц, дублирующимся ключам и экранированию символов. Проверьте: ① нет ли в одной области видимости повторяющихся ключей; ② корректно ли экранированы спецсимволы в строках (двойные кавычки, обратный слэш, переносы строк); ③ не слишком ли глубокая вложенность (TOML 1.0 рекомендует не больше 5 уровней); ④ нет ли пропущенной обязательной секции [package] для Cargo. Синтаксически вывод инструмента корректен на 100%, проблема обычно на стороне потребителя (например, имена полей не соответствуют требованиям Cargo).

Массив объектов превратился в inline-массив, а не в массив таблиц — почему?

В inline-массив ["a","b"] JSON-конвертер превращает только массивы, где все элементы — базовые типы (строка/число/булево/null). Массивы объектов (например, [{"name":"x"}]) становятся массивами таблиц [[items]]. Если массив объектов определён как inline — значит, в нём присутствуют элементы других типов. Проверьте: ① не попали ли в массив строка или число; ② не нарушена ли вложенность.

Некоторые ключи в результате взяты в кавычки — как убрать?

TOML допускает в именах ключей только буквы, цифры, подчёркивание и дефис ([A-Za-z0-9_-]). Если в JSON-ключе есть спецсимволы (пробел, точка, кириллица, эмодзи, зарезервированные слова), инструмент автоматически берёт ключ в двойные кавычки, чтобы TOML оставался валидным: например, {"my key": 1} превратится в "my key" = 1. Если ваш инструмент не принимает ключи в кавычках, переименуйте их в допустимые символы (A-Z a-z 0-9 _ -) и повторите конвертацию.

Браузер тормозит на больших файлах — что делать?

Инструмент оптимизирован под конвертацию в реальном времени, но очень большие файлы (более 1 МБ, сотни тысяч строк) всё же могут нагружать систему. Рекомендации: ① сначала проверьте валидность JSON инструментом форматирования; ② разбейте файл на части (например, по ключам верхнего уровня); ③ убедитесь, что у браузера достаточно памяти; ④ для совсем больших конфигов (10 МБ+) лучше подходят CLI-инструменты вроде taplo или tomlq. Этот инструмент рассчитан на повседневные конфиги — от килобайт до нескольких сотен килобайт.

Глоссарий

TOML
Tom's Obvious, Minimal Language — язык формата, созданный для конфигурационных файлов: лаконичный синтаксис без двусмысленностей; стандартный формат для Rust Cargo, Python pyproject и Hugo.
Table (таблица)
Именованная группа в TOML, объявляемая через [name]; аналог JSON-объекта с поддержкой вложенности через точку, например [server.ssl].
Array of Tables (массив таблиц)
Список однотипных объектов в TOML, объявляемый через [[name]]; каждый блок [[name]] содержит все поля объекта. Аналог JSON-массива объектов.
Inline Table (встроенная таблица)
Синтаксис TOML 1.0, объявляющий простой объект в одной строке через { key = value, key = value }; подходит для плоских объектов без необходимости именования.
Cargo.toml
Стандартный конфигурационный файл проекта на Rust: метаданные пакета, dependencies, dev-dependencies, features и т. д., формат TOML.
pyproject.toml
Стандартный конфигурационный файл проекта на Python (PEP 621): build-system, метаданные проекта, dependencies, секции tool (black, pytest, mypy и др.).
TOML v1.0
TOML 1.0 — стабильная версия, официально выпущенная в 2021 году. Инструмент строго следует этой спецификации (github.com/toml-lang/toml/blob/main/toml.md).
Вложенный JSON-объект
Объект в JSON, содержащий другие объекты. Соответствует TOML-таблице ([section]) или подтаблице ([a.b.c]).
TOML-экранирование
В TOML-строках двойные кавычки, обратные слэши, переносы строк и другие спецсимволы нужно экранировать обратным слэшем (\", \\, \n). Инструмент делает это автоматически.
Конфигурационный файл (Config File)
Файл с настройками, который приложение читает при запуске; отделён от кода для удобства изменений. TOML — один из де-факто стандартов среди конфигов.

Сопоставление типов JSON и TOML

Инструмент преобразует типы JSON в TOML по следующим правилам:

Тип JSONТип TOMLСинтаксис TOMLПояснение
stringstringkey = "value"Строки TOML всегда в двойных кавычках
integerintegerkey = 8080Целые числа без десятичной точки
floatfloatkey = 3.14Дробные числа должны содержать точку
booleanbooleankey = trueВ TOML допускаются только true / false в нижнем регистре
nullstring (пусто)key = ""В TOML нет null — используется пустая строка
array[primitive]arraykey = ["a", "b"]Массивы базовых типов в inline-скобках
array[object]array of tables[[items]] key = valueМассивы объектов через [[name]]
objecttable[name] key = valueОбъекты объявляются таблицей [name]

Таблица экранирования строк TOML

Спецсимволы, которые нужно экранировать в строках TOML:

Исходный символПосле экранированияНазваниеПример
"\"Двойная кавычкаВложенные двойные кавычки в строке
\\\Обратный слэшПуть Windows C:\Users
перенос\nNewlineСжатие многострочного текста
табуляция\tTabПоля с табуляцией
возврат каретки\rCarriage ReturnWindows-перевод строки CRLF
\b\bBackspaceСимвол возврата
\f\fForm FeedСимвол перевода страницы
U+0000\u0000Unicode 0Управляющие символы нужно экранировать через \u

Сравнение JSON и TOML на примерах

Входные данные JSON со сложной структурой и соответствующий TOML на выходе:

СтруктураПример
JSON вход{ "name": "app", "port": 8080 }
TOML выходname = "app" port = 8080
JSON вход{ "server": { "host": "0.0.0.0", "port": 443 } }
TOML выход[server] host = "0.0.0.0" port = 443
JSON вход{ "hosts": [{"ip":"10.0.0.1"},{"ip":"10.0.0.2"}] }
TOML выход[[hosts]] ip = "10.0.0.1" [[hosts]] ip = "10.0.0.2"

Privacy & Security

Разбор JSON, генерация TOML, экранирование строк и чтение файлов выполняются локально в JavaScript вашего браузера. Исходный JSON и готовый TOML не отправляются на сервер и не сохраняются для анализа. Поэтому инструмент подходит даже для конфигураций с паролями, API-ключами и внутренними адресами. Локальная история хранится только в localStorage браузера и удаляется после очистки кэша.

Authoritative References