TOML (Tom's Obvious Minimal Language) هي صيغة ملفات إعداد مصمّمة للبشر. تُربط بوضوح تام بجدول hash، وتدعم الجداول المتداخلة والقيم ذات الأنواع والتعليقات المضمّنة. تستخدم كثير من الأدوات والأطر 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 تمثيلها مباشرةً: التاريخ والوقت مع الإزاحة، والتاريخ والوقت المحلي، والتاريخ المحلي، والوقت المحلي. لا يوجد في 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 والتكامل المستمر
أدوات خطوط العمل مثل GitHub Actions وGitLab CI كثيراً ما تعمل بمدخلات JSON. حوّل إعدادات الأدوات القائمة على TOML (rustfmt.toml، taplo.toml) إلى JSON لخطوات التحقق أو التحليل.
ضمان الجودة والاختبار
أنشئ بيانات اختبار 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 قيم عشرية من نوع اللانهاية و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 (الأسطر التي تبدأ بـ #) أثناء التحويل. لا يدعم JSON التعليقات، فلا توجد طريقة للحفاظ عليها في المخرج. إذا كنت بحاجة إلى الاحتفاظ بالتعليقات، فكّر في استخدام JSONC (JSON with Comments) كصيغة هدف بديلة.
هل يمكن أن يفقد تحويل TOML إلى JSON بيانات؟
بالنسبة لمستندات TOML القياسية، لا تُفقَد أي بيانات. جميع السلاسل والأرقام والقيم المنطقية والمصفوفات والجداول لها نظائر مباشرة في JSON. التحويل الوحيد هو قيم التاريخ والوقت التي تصبح سلاسل ISO 8601 في JSON. حالتان حدّيتان قد تُسبّبان مشكلات: TOML يدعم قيم عشرية من نوع اللانهاية وNaN التي لا تمثيل لها في JSON، والأعداد الصحيحة الكبيرة جداً قد تتجاوز حدود دقة محلّل JSON (2^53 - 1 في JavaScript).
كيف تُمثَّل مصفوفات الجداول في TOML داخل JSON؟
تُعرّف صيغة [[double-bracket]] في TOML مصفوفة من الجداول. كل كتلة [[section]] تُلحق كائناً جديداً بمصفوفة JSON. على سبيل المثال، كتلتا [[fruits]] تُصبحان مصفوفة JSON بكائنين: "fruits": [{...}, {...}]. صيغة القوسين المزدوجين هي من أصعب أجزاء TOML قراءةً لأول مرة؛ أما مخرج JSON فيجعل البنية واضحة.
هل التحويل قابل للعكس؟ هل يمكنني الرجوع من JSON إلى TOML؟
هيكلياً، نعم. يمكن تمثيل أي كائن JSON كجدول TOML، ومصفوفات JSON تُربط بمصفوفات TOML. غير أن الميزات الخاصة بـ TOML كالتعليقات وتجميع المفاتيح المنقوطة وتنسيق الجداول المضمّنة تُفقَد أثناء تحويل TOML إلى JSON الأوّلي ولا يمكن استردادها. ستُنتج الدورة الكاملة TOML صالحاً لكن ربما أقل قراءةً.
ما الفرق بين TOML وJSON لملفات الإعداد؟
صُمِّم TOML للإعداد: يدعم التعليقات، وله صيغة أكثر قراءةً للبنى المتداخلة، ويميّز بين الأعداد الصحيحة والعشرية، ويتضمن أنواعاً أصيلة للتاريخ والوقت. صُمِّم JSON لتبادل البيانات بين البرامج. JSON أوسع دعماً من الأدوات والواجهات البرمجية، لكن TOML أسهل للبشر في القراءة والتحرير. كثير من المشاريع تستخدم TOML للإعداد المصدري وتُحوّل إلى JSON للنشر.
كيف تتعامل الأداة مع المفاتيح المنقوطة مثل server.host؟
المفاتيح المنقوطة في TOML (مثل server.host = "localhost") تُنشئ كائنات متداخلة في JSON: {"server": {"host": "localhost"}}. هذا يعادل تعريف جدول [server] مع مفتاح host تحته. يحلّ المحوّل المفاتيح المنقوطة تلقائياً إلى بنيتها المتداخلة الكاملة.
لماذا يفشل ملف TOML في التحويل؟
الأسباب الشائعة تشمل: غياب علامات الاقتباس حول قيم السلاسل (يستوجبها TOML)، واستخدام علامات Tab للمسافة البادئة داخل السلاسل الأساسية متعددة الأسطر، وتعريفات مفاتيح مكرّرة، وخلط المفاتيح المنقوطة مع ترويسات الجداول الصريحة للمسار ذاته. يعرض المحوّل رسالة خطأ المحلّل مع رقم السطر لمساعدتك في تحديد المشكلة.