TOML (Tom's Obvious Minimal Language) — формат конфігураційних файлів, розроблений для людей. Він однозначно відображається у хеш-таблицю, підтримує вкладені таблиці, типізовані значення та вбудовані коментарі. Багато інструментів і фреймворків використовують TOML як основний формат конфігурації: Rust-проєкти покладаються на Cargo.toml, пакування Python використовує pyproject.toml, а статичні сайти Hugo налаштовуються через config.toml. Конвертація TOML у JSON онлайн дозволяє перетворювати ці конфігураційні файли у формат, який підтримується практично кожною мовою програмування, API та конвеєром обробки даних.
JSON (JavaScript Object Notation), визначений у RFC 8259, — це найбільш широко підтримуваний формат обміну даними. Якщо TOML ставить у пріоритет читабельність для людини завдяки мінімалістичному синтаксису та підтримці коментарів, то JSON ставить у пріоритет машинну сумісність. Конвертер TOML у JSON усуває цю різницю, розбираючи TOML-вхід відповідно до специфікації TOML v1.0.0 і формуючи структурно еквівалентний JSON-документ. Конвертація зберігає всі дані: рядки, цілі числа, числа з плаваючою комою, булеві значення, масиви та таблиці — все отримує відповідний аналог у JSON.
TOML має чотири власних типи дати і часу, які JSON не може представити безпосередньо: datetime зі зміщенням, локальний datetime, локальна дата та локальний час. У JSON немає типу дати, тому ці значення серіалізуються як рядки ISO 8601 під час конвертації.
Навіщо використовувати конвертер TOML у JSON?
Конфігураційні файли у форматі TOML нерідко потрібно передавати до систем, які приймають лише JSON. Замість того щоб переписувати файл вручну або встановлювати бібліотеку-парсер локально, браузерний конвертер виконає перетворення за секунди.
🔒
Обробка без передачі даних
Ваші TOML-дані розбираються і конвертуються повністю у браузері. Нічого не завантажується на сервер, тому конвертація конфігураційних файлів з API-ключами, обліковими даними бази даних або внутрішніми іменами хостів є безпечною.
⚡
Миттєва конвертація
Вставте TOML і одразу отримайте відформатований JSON-вихід. Не потрібно встановлювати пакети Node.js, бібліотеки Python або CLI-інструменти лише для разового перетворення формату.
🔀
Повна підтримка TOML v1.0.0
Конвертер обробляє всі типи даних TOML, включно з ключами з крапками, вбудованими таблицями, масивами таблиць, багаторядковими рядками та значеннями дати і часу. Граничні випадки, що ускладнюють ручну конвертацію, обробляються коректно.
📋
Без реєстрації
Відкрийте сторінку, вставте TOML і скопіюйте результат у JSON. Без реєстрації, без обмежень на кількість запитів і без відстеження використання. Інструмент працює однаково щоразу, коли ви відвідуєте його.
Сценарії використання конвертера TOML у JSON
Розробка фронтенду
Конвертуйте метадані Cargo.toml Rust WASM-проєкту у JSON для використання в JavaScript-скрипті збірки або на кроці генерації package.json.
Бекенд-розробка
Перетворюйте конфігурацію застосунку, написану у TOML, у JSON для вставки в середовища, що вимагають JSON-конфігурацію, — наприклад, змінні середовища AWS Lambda або мітки контейнерів Docker.
DevOps та CI/CD
Такі інструменти конвеєрів, як GitHub Actions та GitLab CI, часто працюють з JSON-вхідними даними. Конвертуйте конфігурації інструментів на основі TOML (rustfmt.toml, taplo.toml) у JSON для кроків лінтингу або валідації.
QA та тестування
Генеруйте JSON-тестові фікстури з TOML-файлів-джерел. TOML зручніше підтримувати як джерело тестових даних завдяки підтримці коментарів і читабельному синтаксису, але тестові фреймворки часто очікують JSON-вхід.
Інженерія даних
При міграції конфігурацій між системами TOML-файли однієї платформи (наприклад, InfluxDB, Telegraf) може знадобитися перетворити на JSON-документи для API або інструменту імпорту іншої платформи.
Навчання та освіта
Студенти, що вивчають формати даних, можуть вставляти TOML-приклади і точно бачити, як таблиці перетворюються на вкладені об'єкти, як масиви таблиць стають JSON-масивами і як типи дат TOML відображаються у рядки.
Довідник відповідності типів TOML і JSON
Кожен тип TOML має прямий аналог у JSON, за одним винятком: значення дати і часу. Таблиця нижче показує, як кожен тип TOML конвертується у JSON. Це відображення відповідає специфікації TOML v1.0.0 і збігається з поведінкою стандартних парсерів: tomllib (Python), toml-rs (Rust) і @iarna/toml (Node.js).
Тип
Синтаксис TOML
JSON-вихід
String
"value"
"value"
Integer
42
42
Float
3.14
3.14
Boolean
true / false
true / false
Offset Date-Time
1979-05-27T07:32:00Z
"1979-05-27T07:32:00Z"
Local Date-Time
1979-05-27T07:32:00
"1979-05-27T07:32:00"
Local Date
1979-05-27
"1979-05-27"
Local Time
07:32:00
"07:32:00"
Array
[1, 2, 3]
[1, 2, 3]
Table
[section]
{ "section": {} }
Inline Table
{ key = "val" }
{ "key": "val" }
Array of Tables
[[items]]
"items": [{}]
Цілі числа TOML підтримують підкреслення для читабельності (наприклад, 1_000_000) та літерали у шістнадцятковому (0xDEADBEEF), вісімковому (0o755) і двійковому (0b11010110) форматах. Усі вони конвертуються у звичайні десяткові числа у JSON. TOML також підтримує значення infinity та NaN для чисел з плаваючою комою, але вони не мають представлення у JSON і спричинять помилку конвертації у суворому режимі.
Приклади коду
Практичні приклади конвертації TOML у JSON на чотирьох мовах. Кожен зчитує TOML-файл, розбирає його та виводить відформатований JSON.
import tomllib # Python 3.11+ (standard library)
import json
with open('config.toml', 'rb') as f:
data = tomllib.load(f)
print(json.dumps(data, indent=2, default=str))
# Dates become strings: "1979-05-27"
# Arrays of tables become JSON arrays of objects
Go
package main
import (
"encoding/json"
"fmt"
"os"
"github.com/BurntSushi/toml"
)
func main() {
var data map[string]any
_, err := toml.DecodeFile("config.toml", &data)
if err != nil {
panic(err)
}
out, _ := json.MarshalIndent(data, "", " ")
fmt.Println(string(out))
}
Що відбувається з коментарями TOML під час конвертації?
Коментарі TOML (рядки, що починаються з #) відкидаються під час конвертації. JSON не підтримує коментарі, тому зберегти їх у виводі неможливо. Якщо вам потрібно зберегти коментарі, розгляньте JSONC (JSON з коментарями) як цільовий формат.
Чи може конвертація TOML у JSON призвести до втрати даних?
Для стандартних TOML-документів дані не втрачаються. Усі рядки, числа, булеві значення, масиви та таблиці мають прямі аналоги у JSON. Єдина трансформація — значення дати і часу, які стають рядками ISO 8601 у JSON. Два граничних випадки можуть спричинити проблеми: TOML підтримує infinity та NaN для чисел з плаваючою комою, які не мають представлення у JSON, а дуже великі цілі числа можуть перевищити ліміти точності JSON-парсера (2^53 - 1 у JavaScript).
Як масиви таблиць TOML представляються у JSON?
Синтаксис [[подвійних дужок]] у TOML визначає масив таблиць. Кожен блок [[section]] додає новий об'єкт до JSON-масиву. Наприклад, два блоки [[fruits]] стають JSON-масивом із двох об'єктів: "fruits": [{...}, {...}]. Синтаксис подвійних дужок — один із складніших елементів TOML для читання; JSON-вихід робить структуру очевидною.
Чи є конвертація оборотною? Чи можна конвертувати JSON назад у TOML?
Структурно — так. Будь-який JSON-об'єкт можна представити як TOML-таблицю, а JSON-масиви відображаються у TOML-масиви. Проте специфічні для TOML особливості — коментарі, групування ключів з крапками та форматування вбудованих таблиць — втрачаються під час початкової конвертації TOML у JSON і не можуть бути відновлені. Зворотний прохід дасть валідний, але потенційно менш читабельний TOML.
У чому різниця між TOML і JSON для конфігураційних файлів?
TOML розроблявся для конфігурацій: підтримує коментарі, має більш читабельний синтаксис для вкладених структур, розрізняє цілі числа та числа з плаваючою комою і включає власні типи дати і часу. JSON розроблявся для обміну даними між програмами. JSON підтримується ширшим колом інструментів та API, але TOML легше читати і редагувати людині. Багато проєктів використовують TOML для вихідної конфігурації і конвертують у JSON для розгортання.
Як цей інструмент обробляє ключі з крапками, наприклад server.host?
Ключі з крапками у TOML (наприклад, server.host = "localhost") створюють вкладені об'єкти у JSON: {"server": {"host": "localhost"}}. Це еквівалентно визначенню таблиці [server] з ключем host. Конвертер автоматично розкладає ключі з крапками у повну вкладену структуру.
Чому мій TOML-файл не вдається конвертувати?
Типові причини: відсутність лапок навколо рядкових значень (TOML вимагає їх), використання табуляції для відступів всередині багаторядкових базових рядків, дублювання визначень ключів і змішування ключів з крапками з явними заголовками таблиць для одного й того ж шляху. Конвертер відображає повідомлення про помилку парсера з номером рядка, що допомагає знайти проблему.