Scala’dan JSON’a Dönüştürücü
Scala case class’larını veya nesnelerini yapıştır. Temiz JSON al.
Bu araç ne yapar
Elinde on küsur alanı olan bir Scala case class’ı varsa ve ona uyan bir JSON payload’a ihtiyacın varsa — test için, bir API çağrısı için, bir Kafka mesaj fixture’ı için — bunu elle yazmak çabuk sıkar. Scala’yı buraya yapıştır, geçerli JSON al. Tek bir case class, bir dosya dolusu case class, ya da adlandırılmış argümanlarla kurulmuş bir instance — aynı akış, aynı sonuç.
Dönüştürücü, yaygın Scala JSON kütüphanelerinin ürettiğiyle uyumlu çalışır. Circe, Play JSON ve uPickle; bir case class’ı alanlarını JSON anahtarlarına çevirerek serialize eder — burada elde ettiğin de tam olarak bu. Int, Long, Double ve BigDecimal JSON sayısına dönüşür. Boolean yine boolean kalır. Option[A], Some(x) olunca değere, None olunca null’a döner veya atlanır. Instant, LocalDateTime ve java.time tipleri ISO-8601 string’i olarak çıkar.
Koleksiyonlar mantıklı bir eşlemeyi takip eder. List, Seq, Vector ve Set hepsi JSON dizisine dönüşür. Map[String, A] JSON nesnesi olur. Tuple’lar, karışık değerlerle dolu JSON dizilerine dönüşür. case class çocukları olan bir sealed trait (bir ADT) yapıştırırsan her variant kendi şekliyle serialize edilir ve parser, çoğu kütüphanenin kullandığı ADT discriminator desenini yakalar. Tek bir dosyadaki birden fazla üst düzey sınıfı yapıştır (ilham için Scala reposuna bak), her biri kendi JSON girdisi olarak çıkar.
Nasıl kullanılır
Üç adım. Tek bir case class için de, komple bir model dosyası için de aynı şekilde çalışır.
Scala’nı yapıştır (ya da örneği dene)
Scala’nı olduğu gibi soldaki editöre bırak. Bir case class, bir sealed trait hiyerarşisi, bir instance veya birden fazla sınıf — hepsi olur. Önce gerçekçi bir örnek görmek istersen Örneği Yükle’ye bas.
import’larını, package bildirimini ve anotasyonları bırakabilirsin. Parser, veri olmayanı görmezden gelir. Dil detayları için docs.scala-lang.org resmi referanstır.
Dönüştür’e bas
Yeşil Dönüştür butonuna tıkla. Araç Scala’yı okur, her sınıfı ve alanı gezer, tek geçişte JSON üretir. Çalışırken kısa bir yüklenme göstergesi görürsün.
JSON’ı kopyala
Sağ panel girintilenmiş JSON ile dolar. Bunu bir ScalaTest spec’ine, bir Akka HTTP mock cevabına, bir Play fixture’ına veya API dokümantasyonuna yapıştırabilirsin.
Gerçekten işe yaradığı zamanlar
ScalaTest fixture’ları
Bir Scala servisi testinde HTTP istemcisini stub’lamak için JSON body’ye ihtiyacın var. case class’ı yapıştır, payload’ı al, spec’ine bırak.
Akka / Play HTTP payload’ları
Bir case class’ı, kendi servisine POST edeceğin JSON’a dönüştür. Yeni bir endpoint bağlarken hızlı curl testleri için iş görür.
Kafka mesaj örnekleri
Yeni bir Kafka topic için örnek JSON mesajları doğrudan domain case class’larından üret — zamanla kodla uyumsuz hale gelen elle yazılmış örnekler yok.
Kodla aynı hizada duran dokümanlar
API dokümantasyonu için JSON örneklerini doğrudan gerçek case class’larından üret; modeller değişirken dokümanlar da doğru kalır.
Sık sorulanlar
Option değerleri nasıl serialize ediliyor?
Some(x) değeri x’e; None JSON null’a dönüşür. Bu, Circe’nin varsayılan davranışıyla aynı. None için anahtarın atlanmasını istiyorsan sonradan çıkarabilirsin — güvenli varsayılan, yapının öngörülebilir kalmasını sağlar.
Peki sealed trait’ler ve ADT’ler?
case class çocukları olan sealed trait’ler variant başına serialize edilir. Birden fazla variant bir parent trait paylaştığında Circe ve Play JSON’ın kullandığı ortak discriminator deseni ({"type": "OrderPlaced", ...}) uygulanır, böylece veriyi ADT’ye geri round-trip edebilirsin.
java.time tiplerini nasıl ele alıyor?
Instant, LocalDate, LocalDateTime ve ZonedDateTime ISO-8601 string olarak serialize edilir. Bu Circe, Play JSON ve uPickle’ın ortak konvansiyonudur ve java.time’a temiz şekilde round-trip olur.
Map, List, Vector, Set desteği var mı?
Var. List, Seq, Vector ve Set hepsi JSON dizisine dönüşür. Map[String, A] JSON nesnesi olur — string olmayan anahtarlı map’ler (Map[Int, A]), JSON yalnızca string anahtar desteklediği için anahtar/değer çiftlerinden oluşan dizi olarak yayılır.
Birden fazla case class içeren tüm bir dosyayı yapıştırabilir miyim?
Yapıştırabilirsin. Her üst düzey sınıf kendi JSON girdisi olur, iç içe instance’lar açılır. Companion object’ler, implicit dönüşümler ve yardımcı metotlar atlanır — çıktıya yalnızca veri yansır.
Kodum saklanıyor mu?
Scala’n dönüştürme için backend’e gönderilir ve kalıcı olarak tutulmaz. Payload’ı log’lamıyoruz. Kod hassassa yapıştırmadan önce bir göz at.
İhtiyacın olabilecek diğer araçlar
Scala’dan JSON bir parça. Şunlar onunla iyi gider: