ToolDeck

TOML به JSON

تبدیل TOML به فرمت JSON

یک مثال امتحان کنید

ورودی TOML

خروجی JSON

به‌صورت محلی اجرا می‌شود · جای‌گذاری اسرار امن است
خروجی JSON اینجا نمایش داده می‌شود…
همچنین امتحان کنید:فرمت‌کننده TOML

تبدیل TOML به JSON چیست؟

TOML (زبان حداقلی آشکار تام) یک فرمت فایل پیکربندی است که برای انسان‌ها طراحی شده. این فرمت به‌صورت یک‌به‌یک به جدول هش نگاشت می‌شود، از جداول تودرتو، مقادیر تایپ‌شده و توضیحات درون‌خطی پشتیبانی می‌کند. بسیاری از ابزارها و فریمورک‌ها از TOML به‌عنوان فرمت پیکربندی اصلی استفاده می‌کنند: پروژه‌های Rust به Cargo.toml متکی هستند، بسته‌بندی Python از pyproject.toml استفاده می‌کند و سایت‌های استاتیک Hugo از طریق config.toml پیکربندی می‌شوند. تبدیل آنلاین TOML به JSON به شما امکان می‌دهد این فایل‌های پیکربندی را به فرمتی تبدیل کنید که تقریباً هر زبان برنامه‌نویسی، API و خط لوله داده می‌تواند به‌صورت بومی مصرف کند.

JSON (نشانه‌گذاری شیء جاوااسکریپت) که توسط RFC 8259 تعریف شده، پرکاربردترین فرمت تبادل داده است. در حالی که TOML با نحو حداقلی و پشتیبانی از توضیحات، خوانایی انسانی را در اولویت قرار می‌دهد، JSON قابلیت پردازش توسط ماشین را اولویت می‌دهد. یک مبدل TOML به JSON این شکاف را با تجزیه ورودی TOML طبق مشخصات TOML v1.0.0 و تولید یک سند JSON معادل ساختاری پر می‌کند. تبدیل تمام داده‌ها را حفظ می‌کند: رشته‌ها، اعداد صحیح، اعداد اعشاری، مقادیر بولی، آرایه‌ها و جداول مستقیماً به معادل‌های JSON خود نگاشت می‌شوند.

TOML چهار نوع تاریخ/زمان بومی دارد که JSON نمی‌تواند مستقیماً آن‌ها را نمایش دهد: تاریخ-زمان با آفست، تاریخ-زمان محلی، تاریخ محلی و زمان محلی. 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 را برای مصرف توسط یک اسکریپت ساخت JavaScript یا یک مرحله تولید package.json به JSON تبدیل کنید.
مهندسی بک‌اند
پیکربندی برنامه نوشته‌شده در TOML را برای تزریق به محیط‌هایی که به پیکربندی JSON نیاز دارند، مانند متغیرهای محیطی AWS Lambda یا برچسب‌های container Docker، به JSON تبدیل کنید.
DevOps و CI/CD
ابزارهای خط لوله مانند GitHub Actions و GitLab CI اغلب با ورودی‌های JSON کار می‌کنند. پیکربندی‌های ابزار مبتنی بر TOML (rustfmt.toml، taplo.toml) را برای مراحل linting یا اعتبارسنجی به JSON تبدیل کنید.
QA و تست
داده‌های آزمایشی JSON را از فایل‌های منبع TOML تولید کنید. TOML به‌دلیل پشتیبانی از توضیحات و نحو خوانا، به‌عنوان منبع داده آزمایشی نگهداری آسان‌تری دارد، اما بسترهای آزمایش اغلب ورودی JSON را انتظار دارند.
مهندسی داده
هنگام مهاجرت پیکربندی بین سیستم‌ها، فایل‌های TOML از یک پلتفرم (مثلاً InfluxDB، Telegraf) ممکن است برای API یا ابزار وارد کردن پلتفرم دیگری باید به اسناد JSON تبدیل شوند.
یادگیری و آموزش
دانشجویانی که فرمت‌های داده را یاد می‌گیرند می‌توانند مثال‌های 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"
Integer4242
Float3.143.14
Booleantrue / falsetrue / false
Offset Date-Time1979-05-27T07:32:00Z"1979-05-27T07:32:00Z"
Local Date-Time1979-05-27T07:32:00"1979-05-27T07:32:00"
Local Date1979-05-27"1979-05-27"
Local Time07: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 همچنین از مقادیر float بی‌نهایت و NaN پشتیبانی می‌کند، اما این‌ها هیچ نمایشی در JSON ندارند و در حالت strict باعث خطای تبدیل می‌شوند.

مثال‌های کد

مثال‌های کاربردی تبدیل TOML به JSON در چهار زبان. هر کدام یک فایل TOML را می‌خواند، تجزیه می‌کند و JSON فرمت‌شده را خروجی می‌دهد.

JavaScript (Node.js)
import { parse } from '@iarna/toml'
import fs from 'fs'

const toml = fs.readFileSync('config.toml', 'utf8')
const json = parse(toml)
console.log(JSON.stringify(json, null, 2))
// Input:  [server]
//         host = "localhost"
//         port = 8080
// Output: { "server": { "host": "localhost", "port": 8080 } }
Python
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))
}
CLI (yj / dasel)
# Using yj (YAML/JSON/TOML converter)
cat config.toml | yj -tj

# Using dasel
dasel -f config.toml -r toml -w json

# Using Python one-liner (3.11+)
python3 -c "import tomllib, json, sys; print(json.dumps(tomllib.load(sys.stdin.buffer), indent=2, default=str))" < config.toml

سوالات متداول

در طول تبدیل با توضیحات TOML چه اتفاقی می‌افتد؟
توضیحات TOML (خطوطی که با # شروع می‌شوند) در طول تبدیل حذف می‌شوند. JSON از توضیحات پشتیبانی نمی‌کند، بنابراین هیچ راهی برای حفظ آن‌ها در خروجی وجود ندارد. اگر نیاز دارید توضیحات را نگه دارید، به‌جای آن از JSONC (JSON با توضیحات) به‌عنوان فرمت هدف استفاده کنید.
آیا تبدیل TOML به JSON می‌تواند داده را از دست بدهد؟
برای اسناد TOML استاندارد، هیچ داده‌ای از دست نمی‌رود. همه رشته‌ها، اعداد، مقادیر بولی، آرایه‌ها و جداول معادل‌های مستقیم JSON دارند. تنها تبدیل مقادیر تاریخ و زمان است که در JSON به رشته‌های ISO 8601 تبدیل می‌شوند. دو مورد خاص می‌توانند مشکل ایجاد کنند: TOML از float های بی‌نهایت و NaN پشتیبانی می‌کند که هیچ نمایشی در JSON ندارند، و اعداد صحیح بسیار بزرگ ممکن است از محدودیت دقت تجزیه‌کننده JSON تجاوز کنند (2^53 - 1 در JavaScript).
آرایه‌های جداول TOML چگونه در JSON نمایش داده می‌شوند؟
نحو [[کروشه دوتایی]] TOML یک آرایه از جداول را تعریف می‌کند. هر بلوک [[بخش]] یک شیء جدید به آرایه 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 به آن‌ها نیاز دارد)، استفاده از tab برای تورفتگی داخل رشته‌های چندخطی پایه، تعریف کلید تکراری و ترکیب کلیدهای نقطه‌دار با سرصفحه‌های صریح جدول برای همان مسیر. مبدل پیام خطای تجزیه‌کننده را با شماره خط نمایش می‌دهد تا به شما در یافتن مشکل کمک کند.