CodeBlanks Logo Icon CodeBlanks

JSON deserialization

kotlinx.serialization ile JSON deserialize öğrenirsin.

JSON deserialization

JSON deserialization, sunucudan gelen JSON metnini Kotlin nesnesine çevirmektir. Ktor'da ContentNegotiation plugin'i bu işi kotlinx.serialization ile yapar.

Bir veri sınıfına @Serializable eklersin; istemci response.body<User>() çağrılınca JSON otomatik olarak User nesnesine döner. Örnek: @Serializable data class User(val name: String, val age: Int). JSON alan adları Kotlin özellik adlarıyla eşleşmelidir. Farklıysa @SerialName ile eşleme yapılır.

body() ile nesne almak

Bir HttpResponse'tan nesne almak için response.body<User>() çağrısı yapılır. Generic parametre hedef türü belirtir.

Örnek: val user: User = client.get(url).body(). Bu çağrı ContentNegotiation plugin'ini kullanır; plugin yoksa hata fırlatır. Dönüş türü derleme zamanında denetlenir; uyumsuz JSON varsa runtime hatası alırsın. Toplu yanıt için body<List<User>>() kullanılır. Plugin, JSON yapısını Kotlin türüne otomatik olarak eşler.

Uygulama Serializable User sınıfı tanımla

@Serializable ile işaretli data class User(val name: String) tanımla. main içinde println("User sınıfı hazır") yazdır.

Başlangıç kodu

Main.kt
// JSON deserialization
// buraya yaz
import kotlinx.serialization.Serializable

fun main() {
    
}

Örnek çözüm

Main.kt
@Serializable
data class User(val name: String)

fun main() {
    println("User sınıfı hazır")
}

Beklenen çıktı

User sınıfı hazır

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Annotation adını tamamla

Soru
@____
data class User(val name: String)
Cevap
@Serializable
data class User(val name: String)

Açıklama: @Serializable ile sınıf işaretlenir.

2 JSON'dan Kotlin nesnesine çevrilmek için hangi annotation gerekir?

  • @Serializable Doğru cevap
  • @JsonProperty
  • @SerializedName
  • @Json

Açıklama: @Serializable kotlinx.serialization için gereklidir.

3 Deserialization parçalarını eşle

Kavram Anlamı
@Serializable Sınıfı işaretler
data class Veri sınıfı
.body() Nesne alır
@SerialName Alan adı eşler

İleri seviye bölümündeki tüm dersler