ToolDeck

تحويل JSON إلى TOML

تحويل JSON إلى صيغة TOML

جرب مثالاً

JSON المدخل

مخرج TOML

يعمل محليًا · آمن للصق الأسرار
سيظهر مخرج TOML هنا…

ما هو تحويل JSON إلى TOML؟

تحويل JSON إلى TOML يُحوّل البيانات من تدوين كائنات JavaScript إلى لغة TOML (Tom's Obvious Minimal Language). يستخدم JSON الأقواس المعقوصة والمربعة والمفاتيح بين علامات اقتباس لتمثيل البيانات المهيكلة. أما TOML فيعتمد صيغة زوج مفتاح-قيمة مسطحة مع ترويسات الأقسام (تُسمى الجداول)، تُشبه في قراءتها ملفات INI لكن مع كتابة صارمة للأنواع. صُمّم TOML خصيصاً لملفات الإعداد حيث تُقدَّم القراءة البشرية على التبادل الآلي.

أصبح TOML صيغة الإعداد الافتراضية في Rust (Cargo.toml) وتعبئة Python (pyproject.toml) ومولدات المواقع الثابتة كـ Hugo وإعدادات نشر Netlify وكثير من أدوات سطر الأوامر. حين تكون بياناتك المصدر بصيغة JSON — من استجابة API أو إعداد مُصدَّر أو ملف مُولَّد — ويتوقع نظامك الهدف TOML، فأنت بحاجة إلى محوّل يَربط كائنات JSON بجداول TOML، ومصفوفات JSON بمصفوفات TOML، مع الحفاظ على كل نوع بيانات بدقة.

تحويل JSON إلى TOML عبر الإنترنت هو أسرع طريقة لإنشاء TOML صالح من بيانات JSON موجودة. يتولى التحويل ربط الأنواع تلقائياً: تصبح سلاسل JSON سلاسل TOML، وتصبح أرقام JSON أعداداً صحيحة أو عشرية في TOML، وتُربط القيم المنطقية مباشرة، وتصبح كائنات JSON جداول TOML. الاستثناء الوحيد هو القيمة null — إذ لا يوجد في TOML نوع null، لذا تُحذف قيم null أو تُحوَّل إلى سلاسل فارغة بحسب المحوّل.

لماذا تستخدم هذا المحوّل؟

TOML هو ما تتوقعه ملفات الإعداد؛ وJSON هو ما تُنتجه واجهات برمجة التطبيقات والأدوات. يجسر هذا المحوّل الفجوة لتنقل البيانات بين الصيغتين دون إعادة كتابة يدوية.

تحويل فوري
الصق JSON واحصل على مخرج TOML فوراً. يعمل التحويل أثناء الكتابة دون أي رحلات إلى الخادم أو رفع ملفات.
🔒
المعالجة تُحافظ على خصوصيتك
يجري كل التحويل محلياً في متصفحك. أسرار الإعداد ومفاتيح API وبيانات اعتماد قواعد البيانات الموجودة في JSON لا تغادر جهازك أبداً.
🔀
دعم كامل للبنية
تصبح الكائنات المتداخلة جداول TOML، ومصفوفات الكائنات تصبح مصفوفات من الجداول ([[table]])، وتُعالج المصفوفات متعددة الأنواع بشكل صحيح.
📋
بدون تسجيل
افتح الصفحة وحوّل. لا تسجيل، ولا إضافات للتثبيت، ولا تبعيات سطر أوامر. يعمل على أي جهاز يحمل متصفحاً حديثاً.

حالات استخدام تحويل 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 البيانات بصيغة JSON. حين تحتاج إلى استخدام تلك البيانات كإعداد TOML — مثل أعلام الميزات أو إعدادات البيئة — الصق الاستجابة واحصل على TOML صالح.
تعلّم صيغة TOML
يستطيع الطلاب والمطورون الجدد على TOML لصق بنى JSON مألوفة ومشاهدة مخرج TOML المقابل.

مقارنة JSON وTOML

يتشابه JSON وTOML في القدرات لكنهما يختلفان في الصيغة ودعم الأنواع والغرض المقصود. يعرض هذا الجدول الفروق التي تؤثر على التحويل.

الميزةJSONTOML
SyntaxBraces, brackets, colons, commasKey = value, [table], [[array]]
CommentsNot allowed (RFC 8259)Supported with #
Data typesstring, number, boolean, null, object, arraystring, integer, float, boolean, datetime, array, table
null supportNative (null)No null type — omit the key or use empty string
Nested objectsUnlimited nesting depthDotted keys or [table.subtable] headers
Arrays of objectsArray of objects with [][[array-of-tables]] syntax
ReadabilityModerate — bracket-heavy at depthHigh — flat key-value pairs
SpecRFC 8259 / ECMA-404TOML v1.0.0 (toml.io)

تحذيرات تحويل TOML

لـ TOML قواعد تختلف عن JSON بطرق تؤثر على مخرج التحويل. هذه المشكلات الأربع هي الأكثر إرباكاً.

لا يوجد نوع null في TOML
يدعم JSON القيمة null كقيمة أساسية. لا يوجد في TOML نوع null على الإطلاق. عند التحويل، يجب التعامل مع قيم null — إما بحذف المفتاح كلياً، أو استخدام سلسلة فارغة، أو اختيار قيمة بديلة. هذا يعني أن الدورة الكاملة من JSON إلى TOML وعودةً قد لا تُعيد إنتاج قيم null الأصلية.
المصفوفات غير المتجانسة مقيّدة
يمكن لمصفوفات JSON خلط الأنواع بحرية: [1, "اثنان", true]. يشترط TOML v1.0.0 أن تكون جميع عناصر المصفوفة من النوع ذاته. إذا كان JSON يحتوي على مصفوفات متعددة الأنواع، فيجب على المحوّل إما تحويل جميع العناصر إلى سلاسل نصية أو إظهار خطأ. تحقق من مخرجاتك حين تحتوي المصفوفات المصدر على أنواع مختلطة.
الكائنات المتداخلة بعمق تصبح مطوّلة
يتعامل JSON مع التداخل العميق بشكل طبيعي عبر الأقواس المتداخلة. يستخدم TOML مفاتيح منقوطة أو ترويسات [table.subtable.key] متسلسلة، وقد تطول هذه الترويسات للبنى المتداخلة بعمق. المخرج صالح لكنه أقل إيجازاً من JSON الأصلي.
قيود تسمية المفاتيح
لا تقبل المفاتيح المجردة في TOML إلا حروف ASCII والأرقام والشرطات والشرطات السفلية. يمكن لمفاتيح JSON أن تكون أي سلسلة نصية. إذا كان JSON يحتوي على مفاتيح بها مسافات أو نقاط أو أحرف خاصة، فيجب وضع تلك المفاتيح بين علامات اقتباس في مخرج TOML. تتولى معظم المحوّلات ذلك تلقائياً، لكن تحقق من المخرج إذا كانت مفاتيحك تحتوي على أحرف غير مألوفة.

أمثلة برمجية

يتطلب تحويل JSON إلى TOML برمجياً مكتبة تسلسل TOML في معظم اللغات. المكتبات القياسية تُحلّل JSON؛ أما مخرج TOML فيحتاج حزمة مخصصة.

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

const json = '{"title":"My App","database":{"host":"localhost","port":5432}}'
const obj = JSON.parse(json)
const toml = stringify(obj)
console.log(toml)
// → title = "My App"
// →
// → [database]
// → host = "localhost"
// → port = 5432
Python
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 (لا يوجد نوع null في TOML، لذا تُحذف قيم null أو تُستبدل) والمصفوفات متعددة الأنواع (يشترط TOML توحيد نوع عناصر المصفوفة). إذا كان JSON يتجنب هذين النمطين، فالتحويل بلا خسارة تامة.
ماذا يحدث لقيم null في JSON عند التحويل إلى TOML؟
لا يوجد في TOML نوع null. تحذف المحوّلات عادةً المفاتيح ذات قيم null من المخرج، إذ لا توجد طريقة لتمثيل "المفتاح موجود لكن بلا قيمة" في TOML. تسمح بعض المحوّلات باختيار سلسلة فارغة بديلاً. تحقق من مخرجاتك إذا كانت قيم null تحمل معنى في بياناتك.
هل يستطيع TOML تمثيل كائنات JSON المتداخلة؟
نعم. تصبح كائنات JSON جداول TOML. كائن متداخل مثل {"database": {"host": "localhost"}} يُحوَّل إلى ترويسة جدول [database] مع host = "localhost" تحتها. يدعم TOML عمق التداخل الاعتباطي عبر المفاتيح المنقوطة أو ترويسات الجداول المتداخلة.
لماذا تستخدم Rust وPython صيغة TOML بدلاً من JSON؟
يدعم TOML التعليقات، وهي ضرورية لتوثيق خيارات الإعداد. كما يُنتج مخرجاً أنظف لإعدادات المفتاح-القيمة المسطحة التي تشكّل معظم بيانات وصف الحزم. يحظر JSON التعليقات (RFC 8259)، مما يجعل صيانته كصيغة إعداد يحررها الإنسان أصعب.
كيف يتعامل TOML مع التواريخ والأوقات؟
يمتلك TOML أنواعاً أصيلة للتاريخ والوقت: التاريخ والوقت مع الإزاحة (2024-01-15T10:30:00Z)، والتاريخ والوقت المحلي، والتاريخ المحلي، والوقت المحلي. لا يوجد في JSON نوع تاريخ — تُخزَّن التواريخ كسلاسل نصية. عند تحويل JSON إلى TOML، تبقى السلاسل الشبيهة بالتواريخ سلاسل نصية ما لم يكتشف المحوّل صراحةً أنماط ISO 8601 ويحوّلها.
هل من الآمن لصق الأسرار وبيانات الاعتماد في هذه الأداة؟
نعم. يعمل التحويل بالكامل في متصفحك باستخدام JavaScript. لا تُرسل أي بيانات إلى أي خادم. يمكنك التحقق من ذلك بفتح أدوات المطوّر في متصفحك والانتقال إلى تبويب الشبكة والتأكد من عدم إرسال أي طلبات أثناء التحويل.
ما إصدار TOML الذي يتبعه المخرج؟
يتبع المخرج TOML v1.0.0 الذي صدر في يناير 2021 وهو المواصفة المستقرة الحالية. يشترط هذا الإصدار توحيد أنواع المصفوفات، ويدعم المفاتيح المنقوطة، ويُعرّف صيغة التاريخ والوقت. تتوفر المواصفة على toml.io.