JSON'dan TOML'a dönüşüm, verileri JavaScript Object Notation'dan Tom's Obvious Minimal Language'e aktarır. JSON, yapılandırılmış verileri temsil etmek için süslü parantez, köşeli parantez ve tırnaklı anahtarlar kullanır. TOML ise INI dosyası gibi okunan ancak katı tiplemeye sahip bölüm başlıkları (tablolar olarak adlandırılır) içeren düz anahtar-değer sözdizimini kullanır. TOML, makine değişimi yerine insan okunabilirliğinin ön planda olduğu yapılandırma dosyaları için özel olarak tasarlanmıştır.
TOML; Rust (Cargo.toml), Python paketleme (pyproject.toml), Hugo statik siteler, Netlify dağıtım ayarları ve pek çok CLI aracı için varsayılan yapılandırma formatı haline gelmiştir. Kaynak veriniz bir API yanıtından, dışa aktarılmış bir yapılandırmadan ya da oluşturulmuş bir dosyadan JSON olarak geldiğinde ve hedef sisteminiz TOML beklediğinde, JSON nesnelerini TOML tablolarına, JSON dizilerini TOML dizilerine eşleyen ve her veri tipini doğru şekilde koruyan bir dönüştürücüye ihtiyaç duyarsınız.
JSON'dan TOML'a çevrimiçi dönüştürme, mevcut JSON verilerinden geçerli TOML üretmenin en hızlı yoludur. Dönüşüm, tür eşlemesini otomatik olarak gerçekleştirir: JSON dizgeleri TOML dizgelerine, JSON sayıları TOML tamsayı veya ondalık sayılarına, JSON boolean'ları doğrudan eşlenir, JSON nesneleri ise TOML tablolarına dönüşür. Tek istisna null'dür — TOML'un null türü yoktur, bu nedenle null değerleri dönüştürücüye bağlı olarak ya atlanır ya da boş dizgeye çevrilir.
Neden Bu JSON'dan TOML'a Dönüştürücüyü Kullanmalısınız?
TOML yapılandırma dosyalarının beklediği formattır; JSON ise API'lerin ve araçların ürettiği formattır. Bu dönüştürücü, verileri manuel olarak yeniden yazmadan iki format arasında geçiş yapmanızı sağlar.
⚡
Anında Dönüşüm
JSON'u yapıştırın ve TOML çıktısını hemen alın. Dönüşüm siz yazarken çalışır; sunucu isteği veya dosya yüklemesi gerekmez.
🔒
Gizlilik Öncelikli İşlem
Tüm dönüşüm tarayıcınızda yerel olarak gerçekleşir. JSON'unuzdaki yapılandırma sırları, API anahtarları ve veritabanı kimlik bilgileri cihazınızdan asla çıkmaz.
🔀
Tam Yapı Desteği
İç içe nesneler TOML tablolarına dönüşür, nesne dizileri ise tablo dizilerine ([[tablo]]) dönüşür ve karışık tipli diziler doğru şekilde işlenir.
📋
Hesap Gerekmez
Sayfayı açın ve dönüştürün. Kayıt yok, yüklenecek eklenti yok, CLI bağımlılığı yok. Modern tarayıcısı olan her cihazda çalışır.
JSON'dan TOML'a Kullanım Senaryoları
Rust Proje Yapılandırması
Cargo.toml, Rust projeleri için bağımlılıkları, özellikleri ve derleme ayarlarını tanımlar. JSON bağımlılık listelerini veya oluşturulmuş yapılandırmaları doğrudan Cargo.toml formatına dönüştürün.
Python Paketleme (pyproject.toml)
PEP 518 ve PEP 621, pyproject.toml'ı Python proje meta veri dosyası olarak standartlaştırdı. Mevcut JSON paket meta verilerini gerekli TOML yapısına dönüştürün.
Statik Site Yapılandırması
Hugo, Netlify ve diğer statik site oluşturucular TOML yapılandırma dosyaları kullanır. JSON tabanlı bir kurulumdan geçiş yaparken veya yapılandırmayı programatik olarak üretirken, çıktıyı TOML'a dönüştürün.
DevOps ve Altyapı
Terraform (belirli sağlayıcılar için), Consul ve çeşitli konteyner çalışma zamanları gibi araçlar TOML yapılandırmasını kabul eder. JSON olarak dışa aktarılan ayarları değerleri yeniden yazmadan TOML'a dönüştürün.
API Yanıtından Yapılandırma Dosyasına
REST API'ler JSON döndürür. Bu verileri TOML yapılandırması olarak kullanmanız gerektiğinde — örneğin özellik bayrakları veya ortam ayarları için — yanıtı yapıştırın ve geçerli TOML'u elde edin.
TOML Sözdizimini Öğrenmek
TOML'a yeni başlayan öğrenciler ve geliştiriciler, tanıdık JSON yapılarını yapıştırıp eşdeğer TOML çıktısını görebilir.
JSON ve TOML Karşılaştırması
JSON ve TOML yetenekler açısından örtüşür; ancak sözdizimi, tür desteği ve amaçlanan kullanım bakımından farklılaşır. Bu tablo, dönüşümü etkileyen farkları gösterir.
TOML'un, JSON'dan farklı olan ve dönüşüm çıktısını etkileyen kuralları vardır. Bu dört sorun en fazla karışıklığa neden olur.
TOML'da null Türü Yoktur
JSON, null'ü birinci sınıf bir değer olarak destekler. TOML'da ise hiç null türü yoktur. Dönüşüm sırasında null değerlerin işlenmesi gerekir — ya anahtar tamamen atlanır, boş dizge kullanılır ya da bir temsil değeri seçilir. Bu durum, JSON'dan TOML'a ve geri yapılan bir döngünün orijinal null değerleri yeniden üretemeyebileceği anlamına gelir.
Heterojen Diziler Kısıtlıdır
JSON dizileri türleri serbestçe karıştırabilir: [1, "iki", true]. TOML v1.0.0, bir dizideki tüm öğelerin aynı tipte olmasını gerektirir. JSON'unuz karışık tipli diziler içeriyorsa, dönüştürücü tüm öğeleri dizgeye çevirmek ya da hata vermek zorunda kalır. Kaynak dizilerin karışık tipler içerdiği durumlarda çıktınızı kontrol edin.
Derin İç İçe Nesneler Ayrıntılı Hale Gelir
JSON, iç içe parantezlerle derin yuvalamayı doğal biçimde işler. TOML, derin yapılar için uzayabilen noktalı anahtarlar veya zincirleme [tablo.altablo.anahtar] başlıkları kullanır. Çıktı geçerlidir ancak JSON özgününden daha az yoğundur.
Anahtar Adlandırma Kısıtlamaları
TOML çıplak anahtarları yalnızca ASCII harfleri, rakamlar, tire ve alt çizgi içerebilir. JSON anahtarları herhangi bir dizge olabilir. JSON'unuzda boşluk, nokta veya özel karakter içeren anahtarlar varsa, bunların TOML çıktısında tırnak içine alınması gerekir. Çoğu dönüştürücü bunu otomatik olarak yapar; ancak anahtarlarınız alışılmışın dışında karakterler içeriyorsa çıktıyı doğrulayın.
Kod Örnekleri
JSON'u TOML'a programatik olarak dönüştürmek, çoğu dilde bir TOML serileştirme kütüphanesi gerektirir. Standart kütüphaneler JSON'u ayrıştırır; TOML çıktısı için özel bir paket gerekir.
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
Sıkça Sorulan Sorular
JSON'dan TOML'a dönüşüm kayıpsız mıdır?
Çoğu veri için evet. Dizgeler, tamsayılar, ondalık sayılar, boolean'lar, nesneler ve dizilerin doğrudan TOML karşılıkları vardır. İki istisna ise null (TOML'da null türü olmadığından null değerler atlanır veya değiştirilir) ve karışık tipli dizilerdir (TOML tekdüzen dizi öğe tipleri gerektirir). JSON'unuz bu iki kalıptan kaçınıyorsa dönüşüm tamamen kayıpsızdır.
JSON null değerleri TOML'da ne olur?
TOML'un null türü yoktur. Dönüştürücüler genellikle null değeri olan anahtarları çıktıdan atlar; çünkü TOML'da "anahtar var ama değeri yok" ifadesinin bir yolu yoktur. Bazı dönüştürücüler bunun yerine boş dizge kullanmayı tercih etmenize izin verir. Null değerlerin verinizde anlam taşıdığı durumlarda çıktınızı kontrol edin.
TOML, iç içe JSON nesnelerini temsil edebilir mi?
Evet. JSON nesneleri TOML tablolarına dönüşür. {"veritabani": {"host": "localhost"}} gibi iç içe bir nesne, altında host = "localhost" bulunan bir [veritabani] tablo başlığına dönüşür. Noktalı anahtarlar veya iç içe tablo başlıkları aracılığıyla isteğe bağlı yuvalama derinliği desteklenir.
Rust ve Python neden JSON yerine TOML kullanır?
TOML yorumları destekler; bu, yapılandırma tercihlerini belgelemek için vazgeçilmezdir. Ayrıca paket meta verisinin büyük bölümünü oluşturan düz anahtar-değer ayarları için daha temiz çıktı üretir. JSON ise yorumları yasaklar (RFC 8259), bu da insanların düzenleyeceği bir yapılandırma formatı olarak sürdürülmesini zorlaştırır.
TOML tarih ve saatleri nasıl işler?
TOML'un yerel datetime türleri vardır: offset datetime (2024-01-15T10:30:00Z), yerel datetime, yerel tarih ve yerel saat. JSON'un tarih türü yoktur — tarihler dizge olarak saklanır. JSON'dan TOML'a dönüşümde tarih benzeri dizgeler, dönüştürücü ISO 8601 kalıplarını açıkça algılamadıkça dizge olarak kalır.
Bu araca sır ve kimlik bilgisi yapıştırmak güvenli midir?
Evet. Dönüşüm tamamen JavaScript kullanılarak tarayıcınızda çalışır. Herhangi bir sunucuya veri gönderilmez. Bunu doğrulamak için tarayıcınızın geliştirici araçlarını açın, Ağ sekmesine geçin ve dönüşüm sırasında hiçbir istek yapılmadığını onaylayın.
Çıktı hangi TOML sürümünü takip eder?
Çıktı, Ocak 2021'de yayımlanan ve mevcut kararlı spesifikasyon olan TOML v1.0.0'ı takip eder. Bu sürüm tekdüzen dizi tiplerini gerektirir, noktalı anahtarları destekler ve datetime formatını tanımlar. Spesifikasyon toml.io adresinde yönetilmektedir.