CodeBlanks Logo Icon CodeBlanks

Liste ve Map serileştirme

List ve Map yapısını JSON'a çevirmeyi öğrenirsin.

Liste serileştirme

Bir List<User> nesnesini yapısal metne çevirmek için yine writeValueAsString kullanılır. Çıktı bir metin dizisidir: [{"name":"Ayşe","age":30},{"name":"Mehmet","age":25}].

Jackson, koleksiyonların tür bilgisini silinmesi (type erasure) nedeniyle readValue'da ek bir TypeReference ister: mapper.readValue(text, new TypeReference<List<User>>(){}). Bu anonim sınıf, generic tür bilgisini çalışma zamanında taşır.

Map serileştirme

Map<String, Integer> gibi bir harita yapısal metin nesnesine çevrilir: anahtarlar metin anahtarı, değerler metin değeri olur. Map<String, User> iç içe nesneler üretir. Okuma da TypeReference<Map<String, User>>() ile yapılır.

Jackson, List ve Map için ayrı bir kod yazmaya gerek bırakmaz; aynı writeValueAsString ve readValue metotları kullanılır. Tür güvenliği TypeReference ile sağlanır.

Uygulama User listesini yapısal metne çevir

record User(String name, int age) {} tanımla. main içine throws Exception ekle. ObjectMapper mapper = new ObjectMapper(); oluştur, List<User> users = new ArrayList<>(); oluştur, users.add(new User("Ayşe", 30)); ve users.add(new User("Mehmet", 25)); ekle. String text = mapper.writeValueAsString(users); ile metin üret ve System.out.println(text); yazdır.

Başlangıç kodu

Main.java
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
import java.util.ArrayList;

// User record tanımla

public class Main {
    public static void main(String[] args) throws Exception {
        // ObjectMapper, users listesi, iki User ekle, writeValueAsString ve println

    }
}

Örnek çözüm

Main.java
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
import java.util.ArrayList;

record User(String name, int age) {}

public class Main {
    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();
        List<User> users = new ArrayList<>();
        users.add(new User("Ayşe", 30));
        users.add(new User("Mehmet", 25));
        String text = mapper.writeValueAsString(users);
        System.out.println(text);
    }
}

Beklenen çıktı

[{"name":"Ayşe","age":30},{"name":"Mehmet","age":25}]

Soru ve cevaplar

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

1 Liste tür başvurusunu tamamla

Soru
mapper.readValue(text, new ____<List<User>>() {});
Cevap
mapper.readValue(text, new TypeReference<List<User>>() {});

Açıklama: TypeReference generic tür bilgisini taşır.

2 List<User> yapısal metne çevrildiğinde ne olur?

  • Metin nesnesi
  • Metin dizisi Doğru cevap
  • Hata fırlatır
  • Boş dize

Açıklama: List metin dizisine ([...]) çevrilir.

3 Koleksiyon serileştirme kavramlarını eşleştir

Kavram Anlamı
List<User> Metin dizisine çevrilir
Map<String, User> Metin nesnesine çevrilir
TypeReference Generic tür bilgisi
writeValueAsString Ortak serileştirme metodu

Orta seviye bölümündeki tüm dersler