Perl’den JSON’a Dönüştürücü
Perl hash ref veya array ref yapıştır. Temiz JSON geri al.
Bu aracın işi
Derin iç içe bir Perl hash ref’ine bakıp karşılığı olan JSON’ı elle yazmaya çalıştıysan, o acıyı bilirsin — => ile : kavgası, tırnaklı anahtarlar, escape edilmiş string’ler, hepsi birden. Perl’i buraya yapıştır, hiçbir şeyi yeniden yazmadan geçerli JSON’ı geri al. Tek bir {...} hash ref’i, my $x = {...}; my $y = [...]; şeklinde sıralı bildirimler ya da hash ref içinde hash ref içinde array ref’lerden oluşan beş katmanlı bir yapı — hepsini kaldırır.
Çıktı, canonical => 1 ile JSON::PP veya Cpanel::JSON::XS’ten alacağınla birebir. Hash ref’ler JSON nesnesine, array ref’ler dizilere, undef null’a, sayılar sayı, string’ler string olarak kalır. Perl dokümantasyonundaki "1" ile 1 arasındaki klasik belirsizlik her zamanki gibi çözülür — sayı gibi görünüyorsa JSON sayısı olarak çıkar.
Blessed referanslar (Perl’deki nesne sürümü) alttaki hash ref’e kadar açılır, yani bless { ... }, "Order" aynı anahtarlara sahip düz bir JSON nesnesi olarak çıkar. JSON::true, JSON::false ve JSON::null sentinel değerleri JSON karşılıklarına dönüşür. Üst seviyede birden fazla bildirim varsa, değişken adıyla JSON çıktısında anahtar olurlar.
Nasıl kullanılır
Üç adım. Küçük bir hash ref yapıştırsan da bütün bir config dump’ı yapıştırsan da aynı şekilde çalışır.
Perl’ini yapıştır (veya örneği dene)
Perl’ini sol editöre olduğu gibi bırak. Bir hash ref, array ref, birden fazla bildirim ya da blessed nesne — hepsi olur. Gerçekçi bir örnek görmek istersen Örneği Yükle’ye tıkla.
Referans söz dizimine dokunma — \%hash, \@array, {...}, [...]. Parser hepsini anlar.
Dönüştür’e bas
Yeşil Dönüştür düğmesine tıkla. Araç Perl yapısını gezer, referansları çözer ve JSON’ı tek geçişte kurar.
JSON’ı kopyala
Sağ panel girintili JSON’ı gösterir; API payload’ı, fixture dosyası ya da CPAN modül testi için hazır. Kopyala, yoluna devam et.
Gerçekten işe yaradığı anlar
Storable veya Data::Dumper’dan çıkış
Yıllardır biriken legacy Perl hash dump’ların var ve bunları modern bir API’a teslim etmen gerek — JSON ortak dil. Encoder yazmadan yapıştır, düzgün JSON’ı al.
Perl script’ten bir REST endpoint’ini beslemek
Cron job’ın veritabanı sorgusundan bir hash ref üretiyor. REST API’a ateşlemeden önce buraya yapıştır ve JSON şeklinin sunucunun beklediğiyle eşleştiğini doğrula.
Test fixture’ları yazmak
Perl modül testinden bir hash ref’i direkt al, JSON’a çevir, diller arası testler için .json fixture dosyasına koy.
Perl kullanmayan ekiplerle config paylaşmak
Bir Perl config dosyası her yerde hash ref kullanır. JSON’a çevir ki Node, Go ya da Python ekibi Perl yüklemeden okuyabilsin.
Sık sorulanlar
Blessed nesnelerle başa çıkıyor mu?
Evet. Blessed bir hash ref (örn. bless { id => 1 }, "Order") alttaki hash ref gibi ele alınır — sınıf adı düşer ve anahtar/değerler düz bir JSON nesnesi olarak çıkar. Bu, convert_blessed ile JSON::PP’nin davranışıyla aynıdır.
<code>undef</code>, <code>JSON::true</code>, <code>JSON::false</code> ne oluyor?
undef JSON’daki null’a dönüşür. JSON::true / \1 true’a, JSON::false / \0 false’a dönüşür. Bunlar Cpanel::JSON::XS’in standart boolean uzlaşımlarıdır.
<code>Data::Dumper</code> çıktısını yapıştırabilir miyim?
Evet — Data::Dumper çıktısı ($VAR1 = {...}; biçimi) sorunsuz parse edilir. Baştaki $VAR1 = değişken adı olarak değerlendirilir ve dış anahtar olur.
Sayılar ile string’ler nasıl ayrılıyor?
Perl bu farkta oldukça gevşektir. Dönüştürücü bilinen kurala uyar: tırnaksız sayısal literaller (42, 3.14) JSON sayısı, tırnak içine alınmış her şey ("42") JSON string’i olarak kalır. Sayı gibi görünen bir string istiyorsan tırnak içine al.
Kodum saklanıyor mu?
Kodun yalnızca dönüştürme için backend’e gider ve kalıcı olarak tutulmaz — payload’ı loglamıyoruz. Hash ref gerçek kimlik bilgileri içeriyorsa yapıştırmadan önce değiştir.
Birden fazla hash ref yapıştırırsam ne olur?
Üst seviyedeki her my $name = {...};, değişken adıyla JSON çıktısında bir anahtar olur. Anonim yapılara "_1", "_2" gibi adlar verilir. Hiçbir şey sessizce atılmaz.
İşine yarayabilecek diğer araçlar
Perl’den JSON’a aracı, geri kalan araç çantasıyla iyi gider: