Sol tarafa Elixir yapıştır, "Dönüştür"’e tıkla — JSON’a çeviririzElixir kodunu yapıştır

Bu araç ne yapıyor

Elinde bir Elixir struct’ı varsa ve minik bir dönüşüm için Jason veya Poison’ı projeye sokmak istemiyorsan, buraya yapıştır, JSON’ı al. Tek bir %Order{} literal’i, map, keyword list, iç içe struct zinciri, hatta farklı biçimlerdeki map’lerden oluşan bir liste bile sorun değil.

Çıktı, struct’ın @derive Jason.Encoder’a sahip olduğunda Jason.encode!/1’in vereceği sonuçla aynı. __struct__ alanı atılır, atom anahtarları JSON string anahtarlarına döner ve iç içe struct’lar iç içe JSON nesnelerine açılır. Listeler JSON dizilerine, nil null’a, true/false aynen, integer’lar integer, float’lar float olarak kalır.

Keyword list’ler ([key: value, other: 1]) JSON nesneleri olarak çıkar — Elixir’in klasik konvansiyonu. Binary string’ler ve charlist’lerin ikisi de JSON string’ine dönüşür. DateTime, Date, NaiveDateTime ve Time, RFC 3339’a göre ISO-8601 string’i olarak çıkar. Tuple’lar JSON dizilerine dönüşür (Jason’ın custom encoder ile kullandığı fallback’in aynısı).

Nasıl kullanılır

Üç adım. Tek satırlık bir map için de, struct’larla dolu bir Phoenix context modülü için de aynı şekilde çalışır.

1

Elixir’ini yapıştır (ya da örneği dene)

Kodunu soldaki editöre bırak. Bir struct literal, bir map, bir keyword list, bir iç içe struct ya da örnekli bir defstruct — hepsi geçerli.

%ModuleName{} söz dizimini, pipe’ları ve defstruct tanımlarını olduğu gibi bırakabilirsin. Parser bunları anlıyor.

2

Dönüştür’e bas

Yeşil Dönüştür butonuna tıkla. Araç struct’ı gezer, __struct__’u atar, iç içe struct’ları açar ve tek seferde JSON’ı üretir.

3

JSON’ı kopyala

Sağ panelden girintili JSON’ı al. Phoenix API testine, ExUnit fixture’ına veya GraphQL endpoint’i için paylaşılan bir schema’ya rahatça yapıştırabilirsin.

Gerçekten işe yaradığı durumlar

Phoenix API fixture’ları

Bir context schema’n var ve controller testi için JSON fixture istiyorsun. Struct’ı yapıştır, JSON’ı kaydet, tamam — IEx’te derleyip encode etmeye gerek yok.

GraphQL response biçimi

Bir <a href="https://hexdocs.pm/absinthe/" target="_blank" rel="noopener">Absinthe</a> resolver’ı yazıyorsun ve resolver fonksiyonunu bağlamadan önce belirli bir struct’ın ne tür bir JSON üreteceğini görmek istiyorsun.

Ecto schema’larını belgelemek

Bir Ecto schema struct’ı aslında bir JSON kontratıdır. Bir kere JSON’a çevir, API dokümanı olarak commit’le, schema değiştiğinde senkron tut.

Diller arası veri aktarımı

Elixir servisin verileri Python ML pipeline’ına teslim ediyor. Örnek bir struct yapıştır, alt taraftaki ekibin tüketeceği JSON’ı önceden gör.

Sık sorulanlar

Jason.encode!/1 ile birebir eşleşiyor mu?

Hedef tam olarak bu. Struct’lar __struct__’unu kaybeder, atom anahtarlar string anahtara döner, iç içe struct’lar iç içe nesnelere açılır. Ağaçtaki her struct’a @derive Jason.Encoder koyduğunda alacağın çıktının aynısı.

Atom’lar nasıl ele alınıyor?

Map’in atom anahtarları JSON string anahtarlarına dönüşür. Atom değerleri, atom adını içeren JSON string’lerine dönüşür (örn. :active, "active" olur) — Jason ile aynı davranış.

Peki tuple’lar?

Tuple’lar JSON dizilerine dönüşür ({1, 2, 3}[1, 2, 3]). Teknik olarak Jason, tuple’lar için custom encoder ister; bu araç veriyi kaybetmemen için sağduyulu varsayılanı seçer.

Keyword list ile map arasında fark var mı?

İkisi de JSON nesnesi olarak çıkar. [name: "Ava", id: 1] keyword list’i ile %{name: "Ava", id: 1} map’i birebir aynı JSON’ı üretir. Keyword list’te aynı anahtar birkaç kez geçiyorsa ilk geçtiği yer korunur.

DateTime ve Decimal nasıl ele alınıyor?

DateTime/Date/NaiveDateTime/Time ISO-8601 string’ine dönüşür. Decimal değerleri JSON sayı olarak çıkar (ya da sayısal string güvenliğini tercih edersen string olarak — biçime göre değişir). Jason’da uygun encoder’ları derive ettiğinde alacağının aynısı.

Kodum saklanıyor mu?

Kodun dönüşüm için backend’e gönderilir ve saklanmaz — payload’ı loglamıyoruz. Yapıştırmadan önce gerçek kullanıcı verilerini ve gizli bilgileri değiştirmeyi unutma.

İşine yarayabilecek diğer araçlar

Elixir to JSON, araç kutusunun geri kalanıyla güzel uyuşuyor: