JSON işleme
- Flutter kursu
- Orta seviye
- Ders 63/99
- 4 dk
JSON yanıtını fromJson ile modele çevirirsin.
Yanıtı modele çevirme
API'den gelen JSON dizesini önce jsonDecode ile Map'e çevirir, sonra Weather.fromJson ile model oluşturursun. Böylece ham Map yerine tür güvenli bir nesne elde edersin.
import 'dart:convert';
Weather parseWeather(String body) {
final json = jsonDecode(body) as Map<String, dynamic>;
return Weather.fromJson(json);
}İç içe JSON ve erişim
Bazı API'ler hava durumu verisini iç içe nesneler içinde verir. jsonDecode sonrası köşeli parantezlerle içeriğe erişir, sonra fromJson'e verirsin.
const body = '{"main": {"sicaklik": 21.0}, "sehir": "İzmir"}';
final json = jsonDecode(body) as Map<String, dynamic>;
final sicaklik = (json['main']['sicaklik'] as num).toDouble();
print(sicaklik); // 21.0Uygulama parseWeather fonksiyonu
parseWeather fonksiyonu yaz: body dizesini jsonDecode ile Map'e çevir, Weather.fromJson ile modele çevir ve döndür. main içinde verilen dizeyi çözüp sehir alanını yazdır.
Başlangıç kodu
import 'dart:convert';
class Weather {
final String sehir;
final double sicaklik;
Weather(this.sehir, this.sicaklik);
factory Weather.fromJson(Map<String, dynamic> json) {
return Weather(
json['sehir'] as String,
(json['sicaklik'] as num).toDouble(),
);
}
}
// parseWeather fonksiyonunu yaz
void main() {
const body = '{"sehir": "Bursa", "sicaklik": 16.0}';
// body'yi parseWeather ile çöz ve sehir'ini yazdır
}Örnek çözüm
import 'dart:convert';
class Weather {
final String sehir;
final double sicaklik;
Weather(this.sehir, this.sicaklik);
factory Weather.fromJson(Map<String, dynamic> json) {
return Weather(
json['sehir'] as String,
(json['sicaklik'] as num).toDouble(),
);
}
}
Weather parseWeather(String body) {
final json = jsonDecode(body) as Map<String, dynamic>;
return Weather.fromJson(json);
}
void main() {
const body = '{"sehir": "Bursa", "sicaklik": 16.0}';
final w = parseWeather(body);
print(w.sehir);
}Beklenen çıktı
Bursa
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 API yanıtını Weather modeline çevirmenin doğru yolu nedir?
- response.statusCode kontrol etmek
- jsonEncode(body) çağrısı yapmak
- jsonDecode(body) ile Map'e çevirip Weather.fromJson'e vermek Doğru cevap
- http.get(body) çağrısı yapmak
Açıklama: jsonDecode dizeyi Map'e çevirir; Weather.fromJson de Map'ten model oluşturur. jsonEncode nesneyi dizeleştirir, http.get dize değil Uri alır, statusCode sadece durumu gösterir.
2 JSON dizesini Map'e çevir
import 'dart:convert';
Weather parseWeather(String body) {
final json = ____ as Map<String, dynamic>;
return Weather.fromJson(json);
}
import 'dart:convert';
Weather parseWeather(String body) {
final json = jsonDecode(body) as Map<String, dynamic>;
return Weather.fromJson(json);
}
Açıklama: jsonDecode(body) dizeyi Map'e çevirir; ardından as Map<String, dynamic> ile tür belirtilir. jsonEncode nesne üretir, http.get istek atar, fromJson Map bekler.
3 JSON işleme parçaları
| Kavram | Anlamı |
|---|---|
jsonDecode(body) |
dizeyi Map'e çevirir |
as Map<String, dynamic> |
tür belirtme |
Weather.fromJson(json) |
model oluşturma |
response.body |
API yanıt dizesi |