İç içe JSON
- Flutter kursu
- Orta seviye
- Ders 53/99
- 4 dk
İç 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
import 'dart:convert';
void main() {
const s = '{"adres": {"sehir": "Bursa"}}';
// iç içe erişimle 'sehir' değerini yazdır
}Örnek çözüm
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
import 'dart:convert';
void main() {
const s = '{"adres": {"sehir": "Ankara"}}';
final m = jsonDecode(s);
final sehir = m['adres'][____];
print(sehir);
}
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 |