JSON deserialization
- Kotlin kursu
- İleri seviye
- Ders 17/83
- 5 dk
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
// JSON deserialization
// buraya yaz
import kotlinx.serialization.Serializable
fun main() {
}Örnek çözüm
@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
@____
data class User(val name: String)
@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 |