CodeBlanks Logo Icon CodeBlanks

JSON işleme

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.0

Uygulama 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

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

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

Soru
import 'dart:convert';

Weather parseWeather(String body) {
  final json = ____ as Map<String, dynamic>;
  return Weather.fromJson(json);
}
Cevap
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

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