You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 20:45:25