تبدیل JSON به TOML، دادهها را از فرمت JavaScript Object Notation به زبان Tom's Obvious Minimal Language منتقل میکند. JSON از آکولاد، براکت و کلیدهای نقلقولدار برای نمایش دادههای ساختاریافته استفاده میکند. TOML از نحو ساده کلید-مقدار با سرفصلهای بخش (به نام جدول) استفاده میکند که شبیه فایل INI است اما با تعیین نوع دقیق. TOML بهطور خاص برای فایلهای پیکربندی طراحی شده که خوانایی انسانی در آنها از تبادل ماشینی مهمتر است.
TOML به فرمت پیکربندی پیشفرض برای Rust (Cargo.toml)، بستهبندی Python (pyproject.toml)، سایتهای استاتیک Hugo، تنظیمات استقرار Netlify و بسیاری از ابزارهای CLI تبدیل شده است. وقتی داده منبع شما به شکل JSON وجود دارد — از یک پاسخ API، یک پیکربندی صادرشده، یا یک فایل تولیدشده — و سیستم مقصد TOML انتظار دارد، به مبدلی نیاز دارید که آبجکتهای JSON را به جداول TOML، آرایههای JSON را به آرایههای TOML تبدیل کند و هر نوع داده را با دقت حفظ کند.
تبدیل آنلاین JSON به TOML سریعترین راه برای تولید TOML معتبر از دادههای موجود JSON است. تبدیل نوع داده بهطور خودکار انجام میشود: رشتههای JSON به رشتههای TOML، اعداد JSON به اعداد صحیح یا اعشاری TOML، مقادیر بولی مستقیماً تبدیل میشوند، و آبجکتهای JSON به جداول TOML تبدیل میشوند. تنها استثنا null است — TOML نوع null ندارد، بنابراین مقادیر null یا حذف میشوند یا بسته به مبدل به رشته خالی تبدیل میشوند.
چرا از این مبدل JSON به TOML استفاده کنیم؟
سیستمهای مقصد فایلهای پیکربندی TOML انتظار دارند؛ APIها و ابزارها JSON تولید میکنند. این مبدل شکاف بین دو فرمت را پر میکند تا بدون بازنویسی دستی بتوانید داده را جابهجا کنید.
⚡
تبدیل فوری
JSON را وارد کنید و خروجی TOML را فوراً دریافت کنید. تبدیل در حین تایپ اجرا میشود، بدون ارسال درخواست به سرور یا آپلود فایل.
🔒
پردازش کاملاً محلی
تمام عملیات تبدیل بهصورت محلی در مرورگر شما انجام میشود. اسرار پیکربندی، کلیدهای API و اطلاعات اتصال پایگاه داده در JSON شما هرگز دستگاه شما را ترک نمیکنند.
🔀
پشتیبانی کامل از ساختار
آبجکتهای تودرتو به جداول TOML، آرایهای از آبجکتها به آرایهای از جداول ([[table]]) تبدیل میشوند، و آرایههای با انواع مختلف بهدرستی مدیریت میشوند.
📋
بدون نیاز به حساب کاربری
صفحه را باز کنید و تبدیل کنید. بدون ثبتنام، بدون نصب افزونه، بدون وابستگی به CLI. روی هر دستگاهی با مرورگر مدرن کار میکند.
موارد استفاده از مبدل JSON به TOML
پیکربندی پروژههای Rust
Cargo.toml وابستگیها، ویژگیها و تنظیمات ساخت پروژههای Rust را تعریف میکند. فهرست وابستگیهای JSON یا پیکربندیهای تولیدشده را مستقیماً به فرمت Cargo.toml تبدیل کنید.
بستهبندی Python (pyproject.toml)
PEP 518 و PEP 621 فایل pyproject.toml را بهعنوان فایل استاندارد متادیتای پروژه Python تثبیت کردند. متادیتای بستههای موجود JSON را به ساختار TOML مورد نیاز تبدیل کنید.
پیکربندی سایتهای استاتیک
Hugo، Netlify و دیگر مولدهای سایت استاتیک از فایلهای پیکربندی TOML استفاده میکنند. هنگام مهاجرت از راهاندازی مبتنی بر JSON یا تولید پیکربندی بهصورت برنامهای، خروجی را به TOML تبدیل کنید.
DevOps و زیرساخت
ابزارهایی مانند Terraform (برای برخی ارائهدهندگان)، Consul و زماناجراهای مختلف کانتینر، پیکربندی TOML میپذیرند. تنظیمات صادرشده JSON را بدون بازنویسی مقادیر به TOML تبدیل کنید.
پاسخ API به فایل پیکربندی
REST APIها JSON برمیگردانند. وقتی نیاز دارید آن داده را بهعنوان پیکربندی TOML استفاده کنید — مثلاً برای فیچر فلگها یا تنظیمات محیطی — پاسخ را وارد کنید و TOML معتبر دریافت کنید.
یادگیری نحو TOML
توسعهدهندگان و دانشجویانی که با TOML آشنا نیستند میتوانند ساختارهای JSON آشنا را وارد کنند و معادل TOML آنها را ببینند.
مقایسه JSON و TOML
JSON و TOML از نظر قابلیت با هم همپوشانی دارند اما در نحو، پشتیبانی از انواع داده و هدف مورد نظر تفاوت دارند. این جدول تفاوتهایی که بر تبدیل تأثیر میگذارند را نشان میدهد.
TOML قوانینی دارد که با JSON تفاوت دارند و بر خروجی تبدیل تأثیر میگذارند. این چهار مورد بیشترین سردرگمی را ایجاد میکنند.
نوع null در TOML وجود ندارد
JSON از null بهعنوان یک مقدار درجهاول پشتیبانی میکند. TOML اصلاً نوع null ندارد. در هنگام تبدیل، مقادیر null باید مدیریت شوند — یا با حذف کامل کلید، استفاده از رشته خالی، یا انتخاب یک مقدار جایگزین. این یعنی یک رفتوبرگشت از JSON به TOML و برعکس ممکن است مقادیر null اصلی را بازتولید نکند.
آرایههای ناهمگون محدود هستند
آرایههای JSON میتوانند انواع مختلف را آزادانه ترکیب کنند: [1, "two", true]. TOML نسخه ۱.۰.۰ الزامی میکند تمام عناصر یک آرایه از یک نوع باشند. اگر JSON شما آرایههای با انواع مختلف دارد، مبدل باید همه عناصر را به رشته تبدیل کند یا خطا بدهد. خروجی را هنگامی که آرایههای منبع انواع مختلط دارند بررسی کنید.
آبجکتهای تودرتوی عمیق طولانی میشوند
JSON تودرتویی عمیق را بهطور طبیعی با آکولادهای تودرتو مدیریت میکند. TOML از کلیدهای نقطهدار یا سرفصلهای زنجیرهای [table.subtable.key] استفاده میکند که برای ساختارهای عمیقاً تودرتو میتوانند طولانی شوند. خروجی معتبر است اما کمتر فشرده از JSON اصلی.
محدودیتهای نامگذاری کلیدها
کلیدهای ساده TOML فقط میتوانند شامل حروف ASCII، اعداد، خط تیره و زیرخط باشند. کلیدهای JSON میتوانند هر رشتهای باشند. اگر کلیدهای JSON شما شامل فاصله، نقطه یا کاراکترهای خاص هستند، آن کلیدها در خروجی TOML باید نقلقولدار شوند. بیشتر مبدلها این را بهطور خودکار انجام میدهند، اما اگر کلیدهای شما کاراکترهای غیرمعمول دارند، خروجی را بررسی کنید.
نمونه کد
تبدیل JSON به TOML بهصورت برنامهای در بیشتر زبانها به یک کتابخانه سریالسازی TOML نیاز دارد. کتابخانههای استاندارد JSON را تجزیه میکنند؛ خروجی TOML به یک بسته اختصاصی نیاز دارد.
import json
import tomli_w # pip install tomli_w
json_str = '{"title": "My App", "database": {"host": "localhost", "port": 5432}}'
data = json.loads(json_str)
toml_str = tomli_w.dumps(data)
print(toml_str)
# → title = "My App"
# →
# → [database]
# → host = "localhost"
# → port = 5432
Go
package main
import (
"encoding/json"
"fmt"
"github.com/pelletier/go-toml/v2"
)
func main() {
jsonStr := `{"title":"My App","database":{"host":"localhost","port":5432}}`
var data map[string]interface{}
json.Unmarshal([]byte(jsonStr), &data)
tomlBytes, _ := toml.Marshal(data)
fmt.Println(string(tomlBytes))
// → title = 'My App'
// →
// → [database]
// → host = 'localhost'
// → port = 5432
}
CLI (yj / remarshal)
# Using yj (https://github.com/sclevine/yj)
echo '{"title":"My App","port":3000}' | yj -jt
# → title = "My App"
# → port = 3000
# Using remarshal (pip install remarshal)
echo '{"title":"My App","port":3000}' | remarshal -if json -of toml
# → title = "My App"
# → port = 3000
سوالات متداول
آیا تبدیل JSON به TOML بدون اتلاف داده است؟
برای اکثر دادهها بله. رشتهها، اعداد صحیح، اعشاریها، مقادیر بولی، آبجکتها و آرایهها همه معادل مستقیم در TOML دارند. دو استثنا وجود دارد: null (TOML نوع null ندارد، بنابراین مقادیر null حذف یا جایگزین میشوند) و آرایههای با انواع مختلط (TOML نوع یکنواخت عناصر آرایه را الزامی میکند). اگر JSON شما از این دو الگو اجتناب کند، تبدیل کاملاً بدون اتلاف داده است.
مقادیر null در JSON پس از تبدیل به TOML چه میشوند؟
TOML نوع null ندارد. مبدلها معمولاً کلیدهایی با مقدار null را از خروجی حذف میکنند، چون در TOML راهی برای نمایش «کلید وجود دارد اما مقدار ندارد» وجود ندارد. برخی مبدلها اجازه میدهند بهجای آن از رشته خالی استفاده کنید. اگر مقادیر null در داده شما معنادار هستند، خروجی را بررسی کنید.
آیا TOML میتواند آبجکتهای تودرتوی JSON را نمایش دهد؟
بله. آبجکتهای JSON به جداول TOML تبدیل میشوند. آبجکت تودرتویی مانند {"database": {"host": "localhost"}} به سرفصل جدول [database] با host = "localhost" زیر آن تبدیل میشود. عمق تودرتویی دلخواه از طریق کلیدهای نقطهدار یا سرفصلهای جدول تودرتو پشتیبانی میشود.
چرا Rust و Python از TOML به جای JSON استفاده میکنند؟
TOML از کامنت پشتیبانی میکند که برای مستندسازی تصمیمات پیکربندی ضروری است. همچنین برای تنظیمات ساده کلید-مقدار که بخش عمده متادیتای بسته را تشکیل میدهند، خروجی تمیزتری تولید میکند. JSON کامنت را ممنوع میکند (RFC 8259) و نگهداری آن بهعنوان یک فرمت پیکربندی قابل ویرایش توسط انسان را دشوارتر میسازد.
TOML چگونه تاریخ و زمان را مدیریت میکند؟
TOML نوعهای datetime بومی دارد: datetime با آفست (2024-01-15T10:30:00Z)، datetime محلی، تاریخ محلی و زمان محلی. JSON نوع تاریخ ندارد — تاریخها بهصورت رشته ذخیره میشوند. هنگام تبدیل JSON به TOML، رشتههای شبیه تاریخ بهعنوان رشته باقی میمانند مگر اینکه مبدل بهطور صریح الگوهای ISO 8601 را تشخیص دهد و تبدیل کند.
آیا وارد کردن اطلاعات محرمانه و اعتبارنامهها در این ابزار امن است؟
بله. تبدیل کاملاً در مرورگر شما با JavaScript اجرا میشود. هیچ دادهای به هیچ سروری ارسال نمیشود. میتوانید این را با باز کردن ابزارهای توسعهدهنده مرورگر، رفتن به تب Network و تأیید اینکه هیچ درخواستی در هنگام تبدیل ارسال نمیشود، تأیید کنید.
خروجی از کدام نسخه TOML پیروی میکند؟
خروجی از TOML v1.0.0 پیروی میکند که در ژانویه ۲۰۲۱ منتشر شد و مشخصات پایدار فعلی است. این نسخه نوع یکنواخت عناصر آرایه را الزامی میکند، از کلیدهای نقطهدار پشتیبانی میکند و فرمت datetime را تعریف میکند. مشخصات در toml.io نگهداری میشود.