Dart/Flutter中JSON转TodayWeather实体,如何正确使用TodayHours构造函数?
JSON转TodayWeather实体的TodayHours构造函数修正
核心错误点
- 实体类拼写错误:
TodayHourse应为TodayHours - TodayHours.fromJson构造函数错误访问层级:每个小时数据是独立对象,无需读取
json['days'][0] - TodayWeather中hours解析逻辑反向:应该用
TodayHours.fromJson(x)而非x.toJson() - TodayWeather包含冗余字段:原JSON的日数据中无
humidity字段,需移除 - 解析方法未做JSON字符串解码:http响应需先转为Map再传入构造函数
修正后的TodayHours实体类
class TodayHours { final String datetime; final num dateEpoch; final String conditions; final num temp; final num windDir; final num windSpeed; final num humidity; final num visibility; TodayHours.fromJson(Map<String, dynamic> json) : datetime = json['datetime'], dateEpoch = json['datetimeEpoch'], conditions = json['conditions'], temp = json['temp'], windDir = json['winddir'], windSpeed = json['windspeed'], humidity = json['humidity'], visibility = json['visibility']; Map<String, dynamic> toJson() => { 'datetime': datetime, 'datetimeEpoch': dateEpoch, 'conditions': conditions, 'temp': temp, 'winddir': windDir, 'windspeed': windSpeed, 'humidity': humidity, 'visibility': visibility, }; }
修正后的TodayWeather实体类
class TodayWeather { final String datetime; final num dateEpoch; final String conditions; final num tempMax; final num tempMin; final num windDir; final num windSpeed; final String sunRise; final String sunSet; final num visibility; final List<TodayHours> hours; TodayWeather.fromJson(Map<String, dynamic> json) : datetime = json['days'][0]['datetime'], dateEpoch = json['days'][0]['datetimeEpoch'], conditions = json['days'][0]['conditions'], tempMax = json['days'][0]['tempmax'], tempMin = json['days'][0]['tempmin'], windDir = json['days'][0]['winddir'], windSpeed = json['days'][0]['windspeed'], sunRise = json['days'][0]['sunrise'], sunSet = json['days'][0]['sunset'], visibility = json['days'][0]['visibility'], hours = List<TodayHours>.from( json['days'][0]['hours'].map((x) => TodayHours.fromJson(x)), ); }
修正后的解析方法
import 'dart:convert'; @override Future<TodayWeather> getTodayWeather() async { final response = await httpClient.get('36.31559%2C59.56796/today?unitGroup=metric&key=Key&contentType=json'); validResponse(response); final Map<String, dynamic> jsonData = jsonDecode(response.body); return TodayWeather.fromJson(jsonData); }
内容的提问来源于stack exchange,提问作者Reza
相关产品推荐
相关产品推荐

