Kotlin'den JSON'a Dönüştürücü
Kotlin data class'larını veya nesnelerini yapıştır. Temiz JSON geri gelsin.
Bu araç ne işe yarar
Bir unit test, bir fixture ya da API çağrısı için Kotlin'in data class'ını yansıtan bir JSON payload'ını elle yazmak zorunda kaldıysan, işin ne kadar angarya olduğunu bilirsin. Normalde kotlinx.serialization'ı devreye alır, class'ı annotate edip çıktıyı almak için uygulamayı çalıştırırsın. Kotlin'i buraya yapıştır ve hiçbiri olmadan geçerli JSON al — Gradle plugin'i yok, @Serializable yok, runtime yok.
Dönüştürücü, Kotlin değerlerinin gerçek serileştirme davranışına saygı duyar. val price: Double = 49.99 bir JSON sayısına, val tags: List<String> bir JSON dizisine, null'lu val address: Address? ise JSON null'ına dönüşür. kotlin.stdlib'deki Instant, LocalDate ve LocalDateTime ISO-8601 string'i olarak çıkar. UUID standart hex string'e dönüşür. Map<String, V> JSON nesnesine, enum class değerleri de string adlarıyla çıkar — Gson veya jackson-module-kotlin'dan alacağın davranışın aynısı.
Serileştirme annotation'larına uyulur. @SerialName("x") JSON anahtarını yeniden adlandırır, @Transient property'yi düşürür. Property açıkça atanmadığında default parametre değerleri çıktıya yazılır. Birden fazla data class'ı bir defada yapıştır; her biri üst düzey giriş olarak çıkar, iç içe tipler açılır, sealed class hiyerarşileri varyantlarına indirgenir. Bir Android uygulaması yayınlıyorsan, çıktı doğrudan Retrofit fixture'larına ve Room test seed'lerine düşer.
Nasıl kullanılır
Üç adım. Tek bir instance yapıştırsan da data class dolu bir dosyayı yapıştırsan da aynı şekilde çalışır.
Kotlin'ini yapıştır (ya da örneği yükle)
Kotlin'ini olduğu gibi sol editöre bırak. Bir data class, normal class, object bildirimi, birden fazla class ya da sealed hiyerarşiler — hepsi olur. Önce gerçekçi bir örnek görmek için Örneği Yükle'ye tıkla.
import'ları, package'ları veya annotation'ları temizlemene gerek yok. Kotlin söz dizimi'ni olduğu gibi bırak — companion object'ler ve backing field'lar da sorun değil.
Dönüştür'e bas
Yeşil Dönüştür düğmesine tıkla. Araç Kotlin'i okur, her data class'ı ve property'yi korur ve JSON'u tek geçişte üretir. Çalışırken kısa bir yükleniyor göstergesi döner.
JSON'u kopyala
Sağdaki panel girintilenmiş JSON ile dolar. Retrofit testine, Room fixture'ına, OpenAPI örneklerine veya REST istemcisine yapıştır. Döngü bu kadar.
Ne zaman gerçekten işe yarar
Android uygulamalarında API fixture'ları
Bir Retrofit request model'in var ve MockWebServer veya Postman'e bırakmak için JSON payload'a ihtiyacın var. Data class'ı yapıştır, JSON'u al, devam.
Backend test verileri
30 data class'lı bir Ktor veya Spring servisi. Her birini tek bir <code>@Serializable</code> annotation'ı bile yazmadan integration test'ler için JSON seed dosyalarına dönüştür.
Güncel kalan dokümantasyon
OpenAPI spec'in veya API referansın için gerçek data class'lardan doğrudan JSON örnekleri üret; böylece dokümantasyon model'den hiç ayrılmaz.
Config dosyası başlangıç şablonları
Yirmi küsur property'li bir Settings data class'ı, düzenlemeye hazır bir JSON template'e dönüşür — elle yazılmış boilerplate yok.
Sık sorulanlar
kotlinx.serialization veya Jackson kurulu olmalı mı?
Hayır. Bu araç sunucu tarafında çalışır ve kodunu derlemez — herhangi bir plugin olmadan JSON alırsın. Uygulamanın içinde runtime serileştirme istiyorsan, native seçim kotlinx.serialization'dır; jackson-module-kotlin da işini görür.
@SerialName, @Transient ve @JsonProperty'ye uyuyor mu?
Evet. @SerialName("x") ve @JsonProperty("x") JSON anahtarını yeniden adlandırır, @Transient / @JsonIgnore ise property'yi çıktıdan çıkarır — kotlinx.serialization semantiğiyle aynı.
Instant, LocalDate ve UUID için durum ne?
Instant, LocalDate, LocalDateTime ve ZonedDateTime'ın hepsi ISO-8601 string'i olarak çıkar. UUID standart 8-4-4-4-12 hex string'ine dönüşür. Duration duration string'i olur.
Nullable'lar, sealed class'lar ve enum'lar nasıl ele alınıyor?
Değeri null olan nullable property'ler JSON null'ına dönüşür; aksi halde iç tip normal şekilde serileştirilir. Sealed class instance'ları varsayılan olarak type discriminator içerir (kotlinx.serialization kullanıyorsan yapılandırılabilir). Enum'lar aksi belirtilmediği sürece string adlarıyla çıkar.
Kodum saklanıyor mu?
Kodun dönüştürme için backend'e gönderilir ve kalıcı olarak saklanmaz — payload'ı loglamıyoruz. Her zaman olduğu gibi, hassas kodu yapıştırmadan önce bir göz at.
Kotlin/JVM ve Kotlin Multiplatform kodunun ikisinde de çalışıyor mu?
Evet. Söz dizimi geçerli Kotlin olduğu sürece dönüştürücü, hedefin JVM, JS, Native veya Multiplatform olmasını umursamaz. JSON karşılığı olmayan platform'a özel tipler (Job veya Flow gibi) null olarak çıkar.
İhtiyaç duyabileceğin diğer araçlar
Kotlin'den JSON'a yapboz'un bir parçası. Bunlar onunla iyi gider: