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

Вставьте JSON-объект слева, получите TOML справа. Строгое соответствие спецификации через @iarna/toml. Без загрузки.

  1. Вставьте JSON-объект в текстовое поле слева.
  2. Нажмите «Преобразовать в TOML». Верхний уровень должен быть JSON-объектом — не массивом.
  3. Скопируйте или скачайте вывод TOML.
  4. Для списков записей используйте TOML-массив таблиц — сначала оберните в `{ items: [...] }`.
Что это делает?

Преобразует JSON-объект в документ, соответствующий TOML 1.0, через @iarna/toml. Вложенные объекты становятся заголовками `[section]`; массивы объектов — блоками массивов таблиц `[[items]]`; строки, числа, булевы и ISO 8601 строки даты-времени отображаются на примитивы TOML. Вывод сортируется к каноническому порядку — ключи появляются перед под-таблицами для совместимости со строгими TOML-парсерами.

Пример

Вход JSON:

{
  "name": "Ada",
  "active": true,
  "address": {
    "city": "London"
  }
}

Выход TOML:

name = "Ada"
active = true

[address]
city = "London"

Типичные ловушки JSON → TOML

У TOML более строгие правила верхнего уровня, чем у JSON. Шаблоны ниже объясняют, почему JSON-значение, которое «должно работать», может не пройти.

  • Массив на верхнем уровне. TOML не может представить массив JSON на верхнем уровне. Оберните его: `{"items": [...]}`. Результат становится массивом таблиц TOML под `[[items]]`.
  • Скаляр на верхнем уровне. У голого `42` или `"hello"` JSON-документа нет ключа, к которому можно прикрепиться в TOML. Оберните в объект: `{"value": 42}`.
  • null-значения. У TOML нет типа null. Сериализатор полностью опускает ключи, чьё JSON-значение равно null. Если нужно представить «явно ничего», используйте пустую строку `""` или предварительно согласованное значение-стрелку, в зависимости от вашего нижестоящего кода.
  • Массивы смешанных типов. TOML 1.0 разрешает `[1, "two"]`, но устаревшие парсеры 0.5 — нет. Если ваш TOML должен ходить через инструменты 0.5, держите массивы однородными в JSON перед конвертацией.
  • Ключи с точками в выводе TOML. JSON-ключ вроде `"my.key"` становится путём «точечного ключа» TOML, который TOML-парсеры интерпретируют как вложенный. Чтобы сохранить буквальную точку в имени ключа, сериализатор берёт его в кавычки: `"my.key" = ...` — но потребители всё равно могут парсить как путь.
  • NaN / Infinity. TOML 1.0 поддерживает литералы `nan`, `inf`, `-inf`. JSON их не представляет — обычно они приходят как строки `"NaN"`, `"Infinity"` и т.д. Преобразуйте вручную, если нужны настоящие специальные float-значения TOML.
Часто задаваемые вопросы

Как представляются даты?

Даты JSON — это ISO 8601-строки, например `"2026-04-26T12:00:00Z"`. Сериализатор сохраняет их как строки в TOML — а не как нативные типы datetime. Чтобы получить нативный TOML datetime, вам понадобится предобработать и выдать значение с правильным маркером типа на стороне JavaScript.

Уплощаются ли глубоко вложенные объекты?

Нет — они становятся вложенными заголовками `[a.b.c]`. Каждый уровень вложенности становится точечно соединённым путём заголовка. Для очень глубоких структур вывод может иметь длинные строки заголовков; это просто способ TOML выражать глубину.

Сохранится ли порядок ключей?

В основном. Сериализатор канонизирует порядок, чтобы примитивы шли перед под-таблицами (правило TOML). Внутри каждого уровня сохраняется JSON-порядок вставки.

Как получить инлайн-таблицу TOML на выходе?

Никак — сериализатор всегда использует блочные заголовки `[section]`, никогда инлайн-таблицы. Если нужен инлайн-вывод, постобработайте результат. Инлайн-таблицы — это особенность читаемости TOML, а не другая форма данных.

Загружается ли мой JSON?

Нет. Всё работает в вашем браузере — ваш ввод парсится и сериализуется JavaScript на этой странице и не отправляется ни на какой сервер.

Можно ли сделать круг JSON → TOML → JSON?

Для поддерживаемых типов (строка, число, булево, вложенный объект, массив объектов) — да. Круги теряют null-значения (у TOML нет null) и могут нормализовать порядок ключей.