Перейти к содержимому

Конвертировать JSON в формат TOML — Numio

Преобразует JSON-объект в TOML. Вложенные объекты становятся секциями [table], массивы объектов — [[array of tables]], а ключи со значением null отбрасываются, так как в TOML нет null.

Перевод JSON-конфигурации в синтаксис pyproject.toml, Cargo.toml, wrangler.toml или конфигурации Hugo.

JSON

TOML

Когда пригодится

  • Перевод JSON-конфигурации в синтаксис pyproject.toml, Cargo.toml, wrangler.toml или конфигурации Hugo.
  • Перенос настроек, сгенерированных скриптом в виде JSON, в конфигурационный файл на TOML.

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

  1. Вставьте JSON-объект (корень должен быть объектом, а не массивом) в левый редактор или откройте файл в кодировке UTF-8 кнопкой загрузки файла.
  2. Проверьте TOML справа: сначала идут скалярные ключи, затем секции [table] и [[array]].
  3. Скопируйте результат и сверьте его с документированными ключами целевого инструмента, прежде чем заменять конфигурацию.

JSON-объект

{
  "title": "My App",
  "port": 8080,
  "debug": false,
  "owner": { "name": "Ada", "since": "2024-01-05T10:00:00Z" },
  "servers": [
    { "host": "a.example.com", "weight": 3 },
    { "host": "b.example.com", "weight": 1 }
  ],
  "ports": [80, 443]
}

TOML

title = "My App"
port = 8_080
debug = false
ports = [ 80, 443 ]

[owner]
name = "Ada"
since = "2024-01-05T10:00:00Z"

[[servers]]
host = "a.example.com"
weight = 3

[[servers]]
host = "b.example.com"
weight = 1

Подробности и ограничения

Целые числа от 1000 и выше получают разделители-подчёркивания (8080 становится 8_080). Это валидный TOML, который разбирается в то же число.

Строки с датами остаются строками в кавычках; в JSON нет типа даты, поэтому значения datetime TOML не создаются.

Ключи со значением null молча опускаются, а 1.0 из JSON записывается как целое 1.

Работает в браузере на @iarna/toml. Список, где объекты смешаны с другими значениями, отклоняется, потому что массивы таблиц TOML не могут их содержать. Подтаблицы выводятся с отступом в два пробела; TOML его игнорирует.

FAQ

Можно ли преобразовать JSON-массив на верхнем уровне?

Нет. TOML-документ должен быть таблицей, поэтому страница сообщает, что JSON является массивом, и предлагает обернуть его в объект, например {"items": [...]}.

Что происходит со значениями null?

Ключ отбрасывается. {"a": null} даёт пустой вывод. Если целевой инструмент ожидает ключ, используйте пустую строку или удалите ключ осознанно.

Почему в числах есть подчёркивания?

Сериализатор форматирует большие целые числа с разделителями разрядов _, что допускает спецификация TOML. Любой парсер TOML читает 8_080 как 8080.

Спецификации и справка