TOML в JSON

Cargo.toml у Rust, pyproject.toml у Python, config.toml у Hugo: формат TOML встречается в современной конфигурации повсюду, а многие инструменты по-прежнему понимают только JSON. Вставьте сюда TOML и получите аккуратно отформатированный JSON: секции [таблиц] становятся вложенными объектами, блоки [[массивов таблиц]] превращаются в массивы объектов, а даты проходят без изменений как строки. Парсер покрывает повседневное ядро TOML; его реальные ограничения (многострочные значения, встроенные таблицы, ключи с точками) честно перечислены ниже.

Как работает преобразование

  1. 1

    Вставьте ваш TOML

    Поместите текст в поле ввода и нажмите «Преобразовать в JSON». Комментарии #, занимающие всю строку, пропускаются автоматически.

  2. 2

    Таблицы становятся объектами

    Заголовок `[server.database]` превращается во вложенные объекты JSON, по уровню на каждое имя через точку.

  3. 3

    Массивы таблиц становятся массивами

    Блоки `[[users]]` собирают массив JSON, по одному объекту на блок.

  4. 4

    Скалярные значения сохраняют тип

    Строки в кавычках, простые десятичные целые и дробные числа, true/false становятся родными типами JSON; даты остаются строками ровно в том виде, как записаны.

  5. 5

    Скопируйте JSON

    Результат отформатирован с отступом в 4 пробела, ключи идут в исходном порядке, всё готово для копирования.

Как сопоставляются типы

Значение TOML Значение JSON Пример
Строка (базовая или литеральная) Строка "hello" → "hello"
Целое (простое десятичное) Число 42 → 42
Дробное (простое десятичное) Число 3.14 → 3.14
Булево Булево true → true
Массив (в одну строку) Массив [1, 2, 3] → [1, 2, 3]
Таблица с ключами Объект [server] + port = 8080 → "server": {"port": 8080}
Массив таблиц Массив объектов [[users]] + name = "alice" → "users": [{"name": "alice"}]
Дата и время Строка, как записана 2026-04-18T10:00:00Z → "2026-04-18T10:00:00Z"

Вывод всегда форматируется с отступом в 4 пробела, поэтому массивы и объекты занимают несколько строк; в таблице выше значения показаны в одну строку для наглядности. Порядок ключей сохраняется ровно таким, каким он записан в вашем TOML.

Разобранный пример

title = "My App"

[server]
host = "localhost"
port = 8080

[[users]]
name = "alice"
admin = true

превращается в:

{
    "title": "My App",
    "server": {
        "host": "localhost",
        "port": 8080
    },
    "users": [
        {
            "name": "alice",
            "admin": true
        }
    ]
}

Поддерживаемый TOML и реальные ограничения

Поддерживается: заголовки [таблиц], включая имена секций с точками, [[массивы таблиц]], пары ключ = значение в одну строку, базовые строки "..." с экранированием \n, \t и \", литеральные строки '...', простые десятичные целые и дробные числа, true/false, однострочные массивы (вложенность допустима), комментарии # на всю строку и даты, передаваемые как строки.

Не поддерживается, и что делать вместо этого:

  • Многострочные строки (""" или ''') и многострочные массивы останавливают парсер с ошибкой. Сначала запишите значение в одну строку.
  • Встроенные таблицы не разворачиваются: point = { x = 1, y = 2 } выходит строкой "{ x = 1, y = 2 }", а не объектом. Перепишите её отдельной секцией [point]. Классический случай: строки зависимостей в Cargo.toml вроде serde = { version = "1.0" }.
  • Ключи с точками слева от знака равенства остаются одним плоским ключом: server.host = "a" даёт ключ "server.host" без вложенности. Используйте вместо этого заголовок [server]. При этом точечные [имена.секций] в заголовках вкладываются корректно.
  • Комментарии после значения не отрезаются: port = 8080 # main превращается в строку "8080 # main". Держите комментарии на отдельных строках.
  • Числовые форматы сложнее простых десятичных не распознаются: 1_000, 0xFF, 5e2, +99, inf и nan выходят строками в кавычках. Пишите 1000, 255, 500, 99.
  • Экранирование \uXXXX в базовых строках не декодируется. Вставьте вместо него сам символ.

Для полного документа TOML 1.0 возьмите консольный конвертер вроде toml2json или загрузите файл через tomllib в Python и выгрузите JSON оттуда.

Где это пригодится

  • Быстрая проверка фрагмента TOML в виде JSON во время отладки.
  • Передача простых значений конфигурации линтерам, скриптам и инструментам инвентаризации, которые принимают только JSON.
  • Генерация тестовых JSON-фикстур из TOML-заметок, которые проще писать от руки.
  • Перенос небольших плоских конфигураций, каких много среди config.toml для Hugo.

Заметки о пути туда и обратно

  • Комментарии не выживают никогда: в JSON просто нет синтаксиса комментариев.
  • Даты остаются строками; последующему коду придётся снова разбирать их в объекты дат.
  • Большие числа: в тексте JSON целые сохраняются как 64-битные значения, но потребители на JavaScript теряют точность выше 2^53. Осторожнее с наносекундными метками времени и числовыми идентификаторами.
  • Порядок ключей этот конвертер сохраняет как в исходнике; другие инструменты JSON могут пересортировать ключи при повторной выдаче документа.

Обратное направление

JSON → TOML: вот сложный маршрут, ведь в JSON есть конструкции (глубокая анонимная вложенность, null), которых в TOML нет или которые он обрабатывает иначе. Большинство сценариев туда-обратно требуют ручной доводки на стороне TOML.

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

Нет. В JSON нет синтаксиса комментариев, поэтому комментарии # на всю строку просто пропускаются. Важное предупреждение: комментарий после значения не отрезается, и port = 8080 # main превращается в строку “8080 # main”. Перед преобразованием держите комментарии на отдельных строках.

Нет. Покрыто повседневное ядро: таблицы с точечными именами секций, массивы таблиц, пары ключ = значение в одну строку, строки в кавычках, простые десятичные числа, булевы значения, однострочные массивы и комментарии на всю строку. Многострочные строки и массивы, встроенные таблицы, ключи с точками и форматы чисел вроде 1_000 или 0xFF не поддерживаются. Для документов по полной спецификации используйте консольный инструмент, например toml2json или tomllib в Python.

Обычные конфигурационные файлы преобразуются мгновенно. Конвертация выполняется на нашем сервере, поэтому огромные документы упираются в размер запроса; для TOML в несколько мегабайт лучше подойдёт консольный конвертер.

Да, этот конвертер работает на сервере: TOML уходит на наш сервер по HTTPS, преобразуется там и возвращается в том же ответе. Содержимое после этого не хранится; остаётся только анонимный счётчик использования. Не вставляйте секреты вроде паролей или API-ключей.

Сопутствующие инструменты

Справочная таблица ASCII

Полная таблица ASCII от 0 до 127 с десятичным, шестнадцатеричным, восьмеричным и двоичным представлением, а также записью числовых ссылок HTML, включая NUL, LF и DEL.

Справочник символов HTML

Справочник HTML-сущностей с поиском, их именованными и числовыми кодами, а также копированием специальных символов и знаков одним кликом.

Смешивание цветов

Смешайте два HEX-цвета в 2-20 равномерных образцов. Каждый промежуточный цвет показывается как HEX-код в верхнем регистре, включая оба края.

Справочник сочетаний клавиш

Ищите документированные сочетания по умолчанию для VS Code, Chrome и Bash с GNU Readline в macOS, Windows и Linux.

Счетчик FPS

Измерьте FPS браузера через requestAnimationFrame: сглаживание, минимальная и максимальная частота кадров, порог предупреждения и график по желанию. Работает локально, без загрузок и API.

Генератор случайных букв

Генерируйте случайные буквы A-Z. Выберите количество, верхний или нижний регистр либо смешанный вариант для игр, заданий и уроков.

Инструмент доступен на других языках