Lua'dan JSON'a Dönüştürücü
Lua tablosunu yapıştırın. JSON olarak geri alın.
Bu araç ne yapar
Bir oyunun config dosyasından, bir Redis scriptinden ya da nginx üstündeki bir OpenResty handler'ından çıkmış bir Lua tablosunu JSON olarak istediyseniz, bu iş tek yapıştırmada hallolur. Sırf bir sabiti serialize edeceğim diye json.lua veya dkjson kurmanıza gerek yok.
Lua tabloları biraz karışıktır çünkü dizi bölümü (1'den başlayan tamsayı anahtarlar) ile hash bölümünü (string veya karışık anahtarlar) aynı yapı içinde barındırır. Dönüştürücü, elinizdeki biçimi tespit eder: saf dizi bölümü bir tablo JSON dizisine, saf hash bölümü bir tablo JSON nesnesine döner; karışık bir tablo ise sayı anahtarları stringe çevrilmiş bir JSON nesnesi olarak çıkar. Lua 5.4 referans kılavuzu'nun anlattığı ve popüler JSON kütüphanelerinin yaptığı şey de budur.
İç içe tablolar istediğiniz kadar derine iner. nil, null'a dönüşür; true/false aynen eşlenir; sayılar sayı kalır (integer'lar integer kalır). Tek tırnak, çift tırnak veya uzun köşeli parantez ([[...]]) ile yazılmış stringlerin hepsi doğru parse edilir. Yorumlar (-- ve --[[ ... ]]) temizlenir.
Nasıl kullanılır
Üç adım. Küçük bir tablo için de uzayıp giden config'ler için de aynı akış.
Lua'nızı yapıştırın (veya örneği deneyin)
Lua tablonuzu soldaki editöre bırakın. Dizi bölümü tablo, hash bölümü tablo, iç içe tablolar veya birden fazla üst düzey local x = {...} bildirimi — hepsi olur.
Lua söz dizimine dokunmayın. Tırnaksız anahtarlar (name = "..."), köşeli parantezli anahtarlar (["foo-bar"] = ...) ve yorumlar sorunsuz parse edilir.
Dönüştür'e basın
Yeşil Dönüştür düğmesine tıklayın. Araç tabloda gezer, her seviyede dizi mi hash mi olduğuna karar verir ve uygun JSON'u üretir.
JSON'u kopyalayın
Sağ paneldeki girintili JSON'u bir config dosyasına, bir API çağrısına veya bir test fixture'ına kopyalayın. Tamam.
Gerçekten işe yaradığı durumlar
Oyun/engine config'lerini taşımak
Birçok engine (Love2D, Defold, World of Warcraft eklentileri) config için Lua tabloları kullanır. Pipeline JSON tabanlı araçlara geçtiğinde dönüşüm tek hamlede biter.
OpenResty / Nginx handler'ı debug'lamak
Bir OpenResty scriptinde yanıt gövdesini Lua tablosu olarak kurdunuz — yeniden deploy etmeden önce istemcinin ne JSON alacağını buraya yapıştırarak görebilirsiniz.
Redis Lua scriptleri
Redis EVAL scripti karmaşık bir yapı döndürür; Lua tablosu literali log'lardan kolayca alınır. JSON'a çevirip uygulamanın gördüğüyle kıyaslayın.
Config'i başka bir dile taşımak
Lua ile yazılmış bir araçtan Node ya da Go'ya geçiyorsunuz. Eski config tablolarını migrasyon formatı olarak JSON'a çevirin.
Sık sorulan sorular
Dizi mi nesne mi olduğuna nasıl karar veriyor?
json.lua'nın kullandığı kuralla aynı: tabloda yalnızca 1'den başlayan ardışık tamsayı anahtarlar varsa dizi; yoksa nesne. Karışık tablolar (1, 2, "name") sayı anahtarları stringlenmiş nesneler olarak çıkar, çünkü JSON dizileri adlandırılmış anahtar taşıyamaz.
Tablo içindeki nil ne olur?
Lua'da nil değeri o anahtarı siler — dönüştürücü aynı kuralı uygular ve nil değerli anahtarları çıktıda atlar. Tek başına bir nil (örneğin local x = nil) JSON null'ına dönüşür.
<code>[[...]]</code> gibi uzun köşeli parantez stringleri destekleniyor mu?
Evet. Uzun köşeli parantez stringleri (eşittir sayısı kaç olursa olsun [==[...]==] dahil) parse edilir ve uygun escape ile JSON stringi olarak çıkar.
Birden fazla tabloyu aynı anda yapıştırabilir miyim?
Evet. Her üst düzey local name = {...} veya name = {...} çıktı JSON'unda bir anahtar olur. İsimsiz son tablolara sayısal anahtarlar verilir. Hiçbir şey sessizce atılmaz.
Kodum saklanıyor mu?
Hayır — dönüştürme için backend'e gönderiyoruz ve saklamıyoruz. Yine de yapıştırmadan önce hassas her şeyi temizleyin.
LuaRocks'un rockspec dosyalarını işler mi?
Evet. Rockspec dosyaları özünde Lua tablolarıdır, bu yüzden tertemiz dönüşür — bağımlılık meta verilerini JSON registry formatına taşımak için kullanışlı.
İhtiyacınız olabilecek diğer araçlar
Lua'dan JSON'a, aletlerin geri kalanıyla iyi geçinir: