CodeBlanks Logo Icon CodeBlanks

İç içe JSON

İç içe Map'lere erişip alt nesneleri okumayı öğrenirsin.

İç içe JSON'a erişim

JSON yanıtları genellikle iç içe nesneler içerir. jsonDecode ile çözüldüğünde, dış Map'in değeri de bir Map olur. İçeriğe köşeli parantezleri art arda kullanarak erişirsin.

const s = '{"kullanici": {"ad": "Ela", "yas": 22}}';
final m = jsonDecode(s) as Map<String, dynamic>;
final ad = m['kullanici']['ad'] as String;
print(ad);  // Ela

İç Map'in türü çalışma anında Map<String, dynamic>'dir; bu yüzden as ile türe çevirmek güvenlidir.

Olmayan anahtarlar ve null riski

İç içe erişimde olmayan bir anahtara ulaşınca hata yerine null döner. Ama null üzerinde tekrar köşeli parantez yaparsan çalışma anı hatası alırsın.

final m = jsonDecode('{"a": {}}') as Map<String, dynamic>;
print(m['a']['b']);  // null
print(m['a']['b']['c']);  // Hata!

Bu yüzden iç içe erişimde her adımın var olduğundan emin olmak gerekir.

Uygulama İç içe JSON'dan şehir yazdır

s dizesini jsonDecode ile çöz ve içteki 'sehir' değerini print ile yazdır.

Başlangıç kodu

main.dart
import 'dart:convert';

void main() {
  const s = '{"adres": {"sehir": "Bursa"}}';
  // iç içe erişimle 'sehir' değerini yazdır
}

Örnek çözüm

main.dart
import 'dart:convert';

void main() {
  const s = '{"adres": {"sehir": "Bursa"}}';
  final m = jsonDecode(s);
  print(m['adres']['sehir']);
}

Beklenen çıktı

Bursa

Soru ve cevaplar

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

1 m['kullanici']['ad'] ifadesi ne döndürür?

  • İç Map'in kendisini
  • Yalnızca dış Map'i
  • İç Map'teki 'ad' değerini Doğru cevap
  • Bir List döndürür

Açıklama: m['kullanici'] iç Map'i verir; ikinci ['ad'] adımı bu iç Map'teki 'ad' değerine eriştir. Sonuç String 'Ela' olur.

2 İç içe erişim

Soru
import 'dart:convert';

void main() {
  const s = '{"adres": {"sehir": "Ankara"}}';
  final m = jsonDecode(s);
  final sehir = m['adres'][____];
  print(sehir);
}
Cevap
import 'dart:convert';

void main() {
  const s = '{"adres": {"sehir": "Ankara"}}';
  final m = jsonDecode(s);
  final sehir = m['adres']['sehir'];
  print(sehir);
}

Açıklama: İç Map'in içindeki 'sehir' değerine erişmek için ikinci köşeli paranteze 'sehir' yazılır.

3 İç içe erişim parçaları

Kavram Anlamı
m['kullanici'] İç Map'e erişir
['ad'] İç Map'teki 'ad' değerini verir
as String Değeri String'e çevirir
jsonDecode JSON dizesini çözüp Map verir

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