CodeBlanks Logo Icon CodeBlanks

Liste modeli

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);  // 2

Iterable 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

main.dart
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

main.dart
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) =&gt; Kullanici.fromJson(e)) çağrısı yapmak
  • jsonEncode(liste) çağrısı yapmak
  • liste.cast&lt;Kullanici&gt;() çağrısı yapmak
  • liste.map((e) =&gt; Kullanici.fromJson(e as Map&lt;String, dynamic&gt;)).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

Soru
final liste = jsonDecode(s) as List;
final kullanicilar = liste
    .map((e) => Kullanici.fromJson(e as Map<String, dynamic>))
    ____;
print(kullanicilar.length);
Cevap
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) =&gt; ...) her elemanı dönüştürür
.toList() Iterable'ı List'e çevirir
e as Map&lt;String, dynamic&gt; elemanı Map'e çevirir
List&lt;Kullanici&gt; sonuç türü

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