Liste ve Map serileştirme
- Java kursu
- Orta seviye
- Ders 80/116
- 5 dk
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
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
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
mapper.readValue(text, new ____<List<User>>() {});
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 |