Liste modeli
- Flutter kursu
- Orta seviye
- Ders 59/99
- 4 dk
JSON listesinden List<Model> üretmeyi öğrenirsin.
JSON dizisini List<Model>'e çevirmek
Bir JSON dizisini List<Model>'e çevirmek için önce jsonDecode ile List'e alır, sonra .map() ile her elemanı modelin fromJson kurucusundan geçirirsin. .map() bir Iterable döndürdüğü için sonunda .toList() çağrısı yapman gerekir.
const s = '[{"ad":"Ali"},{"ad":"Veli"}]';
final liste = jsonDecode(s) as List;
final kullanicilar = liste
.map((e) => Kullanici.fromJson(e as Map<String, dynamic>))
.toList();
print(kullanicilar.length); // 2Iterable ve toList
jsonDecode bir JSON dizisini List<dynamic> olarak verir; elemanların türü dynamic'dir. .map() içinde her e elemanını Map<String, dynamic>'e çevirip fromJson'e verirsin. .toList() olmadan sonuç bir Iterable olur ve liste gibi kullanılamaz.
final liste = jsonDecode(s) as List;
final sonuc = liste
.map((e) => Kullanici.fromJson(e as Map<String, dynamic>))
.toList(); // Iterable'dan List'e
sonuc.forEach((k) => print(k.ad));Uygulama JSON listesini modele çevir
s dizesini jsonDecode ile çözüp List'e çevir. Her elemanı Kullanici.fromJson ile modele çevir ve .toList() ile listeye dönüştür. Listenin uzunluğunu print ile yazdır.
Başlangıç kodu
import 'dart:convert';
class Kullanici {
final String ad;
final int yas;
Kullanici(this.ad, this.yas);
factory Kullanici.fromJson(Map<String, dynamic> json) {
return Kullanici(json['ad'] as String, json['yas'] as int);
}
}
void main() {
const s = '[{"ad":"Ali","yas":20},{"ad":"Veli","yas":25}]';
// s'yi çöz, her elemanı Kullanici'ya çevir ve sayıyı yazdır
}Örnek çözüm
import 'dart:convert';
class Kullanici {
final String ad;
final int yas;
Kullanici(this.ad, this.yas);
factory Kullanici.fromJson(Map<String, dynamic> json) {
return Kullanici(json['ad'] as String, json['yas'] as int);
}
}
void main() {
const s = '[{"ad":"Ali","yas":20},{"ad":"Veli","yas":25}]';
final liste = jsonDecode(s) as List;
final kullanicilar = liste
.map((e) => Kullanici.fromJson(e as Map<String, dynamic>))
.toList();
print(kullanicilar.length);
}Beklenen çıktı
2
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 JSON dizisini model listesine çevirmek için hangi yol doğrudur?
- liste.forEach((e) => Kullanici.fromJson(e)) çağrısı yapmak
- jsonEncode(liste) çağrısı yapmak
- liste.cast<Kullanici>() çağrısı yapmak
- liste.map((e) => Kullanici.fromJson(e as Map<String, dynamic>)).toList() çağrısı yapmak Doğru cevap
Açıklama: jsonEncode listeyi dizeleştirir, modele çevirmez. cast çalışma anında hata verir çünkü elemanlar Map'tir. forEach void döndürür ve sonuç atanamaz. Doğru yol .map((e) => fromJson(e)).toList()'dir.
2 Iterable'ı List'e çevir
final liste = jsonDecode(s) as List;
final kullanicilar = liste
.map((e) => Kullanici.fromJson(e as Map<String, dynamic>))
____;
print(kullanicilar.length);
final liste = jsonDecode(s) as List;
final kullanicilar = liste
.map((e) => Kullanici.fromJson(e as Map<String, dynamic>))
.toList();
print(kullanicilar.length);
Açıklama: .map() bir Iterable döndürür; List olarak kullanmak için .toList() çağrısı yapılır.
3 List dönüşüm parçaları
| Kavram | Anlamı |
|---|---|
.map((e) => ...) |
her elemanı dönüştürür |
.toList() |
Iterable'ı List'e çevirir |
e as Map<String, dynamic> |
elemanı Map'e çevirir |
List<Kullanici> |
sonuç türü |