目录
前言
一、百度天气JSON
1、请求参数
2、返回参数
3、属性映射
二、GSON属性映射实战
1、类对象映射
2、属性字段映射
3、日期数据映射
三、天气接口对象展示
1、接口调用
2、Java属性打印输出
四、总结
前言
在当今数字化时代,数据的高效处理与转换已成为软件开发中不可或缺的关键环节。JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,因其简洁易读、易于解析的特点,在众多领域被广泛应用,尤其是在网络数据交互中。而 JavaBean 作为 Java 编程中一种重要的组件模式,能够将数据封装为对象,方便进行操作和管理。将 JSON 数据转换为 JavaBean,不仅能够提升数据的可操作性,还能更好地实现面向对象的设计理念。在众多的 JSON 解析库中,GSON 以其强大的功能、简洁的 API 和高效的性能脱颖而出,成为开发者处理 JSON 数据的首选工具之一。GSON 提供了简单易用的方法,能够轻松地将 JSON 字符串转换为 Java 对象,同时也支持将 Java 对象序列化为 JSON 字符串。这种双向转换的能力,使得 GSON 在处理复杂的 JSON 数据结构时表现出色,极大地简化了开发流程。
本文将深入探讨如何在 GSON 框架下,将百度天气的 JSON 数据转换为 JavaBean。首先,我们将详细分析百度天气 JSON 数据的结构特点。百度天气的 JSON 数据包含多个层次和复杂的数据字段,如城市信息、天气状况、温度、风力、空气质量等。了解这些数据的结构,是实现准确转换的前提。我们将通过实际的 JSON 数据样例,逐步解析每个字段的含义和作用。其次我们将进入核心实战环节。根据百度天气 JSON 数据的结构,设计相应的 JavaBean 类。这些 JavaBean 类将作为数据的载体,用于存储和操作天气数据。我们将详细介绍如何根据 JSON 字段定义 JavaBean 的属性,以及如何通过 GSON 的注解和配置来实现精确的映射关系。通过具体的代码实现,展示如何将复杂的百度天气 JSON 数据转换为 JavaBean 对象,并处理可能出现的常见问题,如字段缺失、数据类型不匹配等。最后,我们将总结 GSON 在处理百度天气 JSON 数据时的最佳实践和注意事项。通过实际案例的分析,分享如何优化代码结构、提高转换效率以及确保数据的准确性和完整性。同时,我们还将探讨如何利用转换后的 JavaBean 数据进行进一步的业务逻辑开发,例如数据展示、数据分析等,为读者提供更全面的实战指导。
通过本文的深入解析和实战操作,读者将能够掌握 GSON 框架下将百度天气 JSON 数据转换为 JavaBean 的完整流程,从而在实际开发中更加高效地处理类似的 JSON 数据转换任务。无论你是初学者还是有一定经验的开发者,本文都将为你提供有价值的参考和指导,帮助你在 JSON 数据处理领域迈向更高的台阶。
一、百度天气JSON
百度天气作为国内知名的天气信息服务提供商,其提供的天气数据接口以 JSON 格式返回丰富的天气信息,包括实时天气、未来几天的天气预报、空气质量等。这些数据对于开发天气相关的应用(如天气查询应用、出行规划应用等)具有极高的价值。然而,原始的 JSON 数据格式并不便于直接在 Java 应用中使用,这就需要我们将 JSON 数据转换为 JavaBean,以便更好地进行数据处理和业务逻辑实现。为了更好的实现天气的JSON到JavaBean的转换,我们首先对百度天气接口的请求参数、返回参数和属性映射关系进行简单介绍。
1、请求参数
为了方便第一次阅读本文的朋友对百度的天气接口也有一定的了解,本文首先对百度天气的请求参数进行简单介绍。如果在开发过程中已经非常熟悉相关的接口,可以直接进入下一个小节的内容。用户可通过行政区划代码查询实时天气信息及未来5天天气预报。
参数名称 | 参数含义 | 默认值 | 字段类型 | 必选 |
---|---|---|---|---|
district_id | 区县的行政区划编码,和location二选一 | 无 | string | 否 |
location | 经纬度,经度在前纬度在后,逗号分隔。支持类型:bd09mc/bd09ll/wgs84/gcj02。 | 无 | double | 否 |
ak | 开发者密钥,可在API控制台申请获得 | 无 | string | 是 |
data_type | 请求数据类型。数据类型有:now/fc/index/alert/fc_hour/all,控制返回内容 | 无 | string | 是 |
output | 返回格式,目前支持json/xml | json | string | 否 |
coordtype | 支持类型:wgs84/bd09ll/bd09mc/gcj02 | wgs84 | string | 否 |
注意:如果district_id和location同时传,默认以district_id为准;
2、返回参数
参数名 | 参数类型 | 描述信息 | 返回条件 | 异常值 |
---|---|---|---|---|
address | Object | 地理位置信息 | - | - |
country | String | 国家名称 | 始终返回 | - |
province | String | 省份名称 | 始终返回 | - |
city | String | 城市名称 | 始终返回 | - |
name | String | 区县名称 | 始终返回 | - |
id | String | 区县id | 始终返回 | - |
now | Object | 实况数据 | - | - |
temp | Int | 温度(℃) | 始终返回 | 999999 |
feels_like | Int | 体感温度(℃) | data_type=now/all | 999999 |
rh | Int | 相对湿度(%) | data_type=now/all | 999999 |
wind_class | String | 风力等级 | data_type=now/all | 暂无 |
wind_dir | String | 风向描述 | data_type=now/all | 暂无 |
text | String | 天气现象 参考天气取值对照表 | data_type=now/all | 暂无 |
prec_1h | Double | 1小时累计降水量(mm) | data_type=now/all | 999999 |
clouds | Int | 云量(%) | data_type=now/all | 999999 |
vis | Int | 能见度(m) | data_type=now/all | 999999 |
aqi | Int | 空气质量指数数值 | data_type=now/all | 999999 |
pm25 | Int | pm2.5浓度(μg/m3) | data_type=now/all | 999999 |
pm10 | Int | pm10浓度(μg/m3) | data_type=now/all | 999999 |
no2 | Int | 二氧化氮浓度(μg/m3) | data_type=now/all | 999999 |
so2 | Int | 二氧化硫浓度(μg/m3) | data_type=now/all | 999999 |
o3 | Int | 臭氧浓度(μg/m3) | data_type=now/all | 999999 |
co | Double | 一氧化碳浓度(mg/m3) | data_type=now/all | 999999 |
uptime | String | 数据更新时间,北京时间 | data_type=now/all | - |
alert | ObjectArray | 气象预警数据 | - | - |
type | String | 预警事件类型 参考 天气取值对照表中的预警类型 | data_type=alert/all | 暂无 |
level | String | 预警事件等级 | data_type=alert/all | 暂无 |
title | String | 预警标题 | data_type=alert/all | - |
desc | String | 预警详细提示信息 | data_type=alert/all | - |
indexes | ObjectArray | 生活指数数据 | - | - |
name | String | 生活指数中文名称 | data_type=index/all | 暂无 |
brief | String | 生活指数概要说明 | data_type=index/all | 暂无 |
detail | String | 生活指数详细说明 | data_type=index/all | 暂无 |
forecasts | ObjectArray | 预报数据 | - | - |
date | String | 日期,北京时区 | data_type=fc/all | - |
week | String | 星期,北京时区 | data_type=fc/all | - |
high | Int | 最高温度(℃) | data_type=fc/all | 999999 |
low | Int | 最低温度(℃) | data_type=fc/all | 999999 |
wc_day | String | 白天风力 | data_type=fc/all | 暂无 |
wc_night | String | 晚上风力 | data_type=fc/all | 暂无 |
wd_day | String | 白天风向 | data_type=fc/all | 暂无 |
wd_night | String | 晚上风向 | data_type=fc/all | 暂无 |
text_day | String | 白天天气现象 参考天气取值对照表 | data_type=fc/all | 暂无 |
text_night | String | 晚上天气现象 参考天气取值对照表 | data_type=fc/all | 暂无 |
wind_angle | Int | 风向角度(°) | data_type=now/all 且 user_type=vip | 999999 |
uvi | Int | 紫外线指数 | data_type=now/all 且 user_type=vip | 999999 |
pressure | Int | 气压(hPa) | data_type=now/all 且 user_type=vip | 999999 |
dpt | Int | 露点温度(℃) | data_type=now/all 且 user_type=vip | 999999 |
除了未来几天的天气实况以外,未来24小时逐小时预报返回参数:
参数名 | 参数类型 | 描述信息 | 返回条件 | 异常值 |
---|---|---|---|---|
forecast_hours | Object Array | 预报数据 | - | - |
text | String | 天气现象 参考天气取值对照表 | data_type=fc_hour/all | "暂无" |
temp_fc | Int | 温度(℃) | data_type=fc_hour/all | 999999 |
wind_class | String | 风力等级 | data_type=fc_hour/all | "暂无" |
wind_dir | String | 风向描述 | data_type=fc_hour/all | "暂无" |
rh | Int | 相对湿度 | data_type=fc_hour/all | 999999 |
prec_1h | Double | 1小时累计降水量(mm) | data_type=fc_hour/all | 999999 |
clouds | Int | 云量(%) | data_type=fc_hour/all | 999999 |
data_time | String | 数据时间 | data_type=fc_hour/all | 999999 |
wind_angle | Int | 风向角度(°) | data_type=fc_hour/all 且 user_type=vip | 999999 |
pop | Int | 降水概率(%) | data_type=fc_hour/all 且 user_type=vip | 999999 |
uvi | Int | 紫外线指数 | data_type=fc_hour/all 且 user_type=vip | 999999 |
pressure | Int | 气压(hPa) | data_type=fc_hour/all 且 user_type=vip | 999999 |
dpt | Int | 露点温度(℃) | data_type=fc_hour/all 且 user_type=vip | 999999 |
在熟悉了请求参数和返回参数之后,我们来看一下通过接口实际返回的JSON数据。
3、属性映射
关于如何使用公共的接口来封装百度的调用key的内容,在之前的博文内容有所介绍,这里不进行赘述。这里将给出某区县的返回结果:
通过返回的信息可以清晰的看出,百度的天气接口返回当前天气实况、告警信息、生活指数、未来逐日天气预报和未来24小时的逐小时天气预报。而这个接口规范将支持将这个JSON反序列化成JavaBean。
二、GSON属性映射实战
本节将进入核心实战环节。根据百度天气 JSON 数据的结构,设计相应的 JavaBean 类。这些 JavaBean 类将作为数据的载体,用于存储和操作天气数据。我们将详细介绍如何根据 JSON 字段定义 JavaBean 的属性,以及如何通过 GSON 的注解和配置来实现精确的映射关系。通过具体的代码实现,展示如何将复杂的百度天气 JSON 数据转换为 JavaBean 对象,并处理可能出现的常见问题,如字段缺失、数据类型不匹配等。
1、类对象映射
为了实现将JSON字符串反序列化成JavaBean,我们需要定义一个跟JSON字符串想匹配的对象。其对应的属性名称应该较为相似,包括:状态、天气信息对象、响应消息字符串。核心代码如下:
package com.yelang.project.weather.domain;
import java.io.Serializable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@NoArgsConstructor
@AllArgsConstructor
@Setter
@Getter
@ToString
public class BdWeatherDTO implements Serializable {private static final long serialVersionUID = -3963983158543661660L;private int status;private WeatherInfoDTO result;private String message;
}
注意这里最核心的对象是WeatherInfoDTO对象,直接存储转换对象信息。经过前面的JSON与JavaBean的对应关系可知,这个result对象包含着当前天气信息、预警信息、生活指数信息和逐日天气预报和未来24小时的逐小时预报。关键代码如下:
package com.yelang.project.weather.domain;
import java.io.Serializable;
import java.util.List;
import com.google.gson.annotations.SerializedName;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@NoArgsConstructor
@AllArgsConstructor
@Setter
@Getter
@ToString
public class WeatherInfoDTO implements Serializable{private static final long serialVersionUID = 5849724792198940369L;private WeatherNow weatherNow;//实时天气private List<WeatherAlerts> alerts;private List<WeatherIndexes> indexes;private List<WeatherForecasts> forecasts;private List<WeatherForecastHours> forecastHours;
}
篇幅有限,这里不能逐一展开,这里以生活指数的JavaBean的定义为例进行说明。其它的对象定义基本与接口返回的参数和说明基本一致,在此不一一进行列举。
package com.yelang.project.weather.domain;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@NoArgsConstructor
@AllArgsConstructor
@Setter
@Getter
@ToString
public class WeatherIndexes implements Serializable{private static final long serialVersionUID = 498655771178931771L;@TableId(value ="pk_id")private Long pkId ;//主键@TableField(value="weather_pk_id")private Long weatherPkId;//实时天气信息主键private String name;//生活指数中文名称private String brief;//生活指数概要说明private String detail;//生活指数详细说明
}
将实际的属性信息完全列出来之后,下面就可以实现根据JSON属性进行对象转换。
2、属性字段映射
众所周知在JavaBean的编写过程当中,我们的json的命名方式和Java不尽相同,两者存在着较大的偏差,因此这就非常容易导致json的key值跟javabean的属性名存在较大的不一致,那么此时又应该如何处理呢?其实Gson框架本身就存在这样的考虑。如果遇到两者的属性名称不一致的情况,直接使用@SerializedName("feels_like")来设置即可,如当前天气信息对应的JavaBean:
经过以上的定义,其对应的属性值就能正常的进行赋值。需要注意的是,在使用@SerializedName这个注解时,传入的名称应当是json文件的key值。这样才能实现针对性的转换。
3、日期数据映射
与属性字段同时并存的一种情况是,在百度的天气接口中,我们定义了一个Timestamp的数据类型,而在json接口中可能只是一个字符串,那么如何直接将字符串转换成Timestamp呢?这时候就没有直接的注解直接使用,需要我们自己来扩展出一个适配器来进行处理。首先我们定义一个Timestamp的适配器对象,然后在适配器中定义不同的转换器来实现时间戳的格式化,关键代码如下:
package com.yelang.project.weather.adapter;
import com.google.gson.TypeAdapter;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import java.io.IOException;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
/*** - 自定义时间戳转换器,将百度天气接口的字符串转为时间类型* @author 夜郎king**/
public class TimestampTypeAdapter extends TypeAdapter<Timestamp>{private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");@Overridepublic void write(JsonWriter out, Timestamp value) throws IOException {if (value == null) {out.nullValue();} else {out.value(dateFormat.format(value));}}@Overridepublic Timestamp read(JsonReader in) throws IOException {String timestampString = in.nextString();try {return new Timestamp(dateFormat.parse(timestampString).getTime());} catch (ParseException e) {throw new IOException("Failed to parse timestamp: " + timestampString, e);}}
}
定义好适配器之后,接下来我们需要在JavaBean的配置当中来进行启用,启用的关键代码如下,这里需要使用的注解是@JsonAdapter:
@JsonAdapter(TimestampTypeAdapter.class)
private Timestamp uptime;//数据更新时间,北京时间
经过以上几步,基本就实现了基于GSON的json字符串与JavaBean的属性映射设置。接下来就可以实现数据的实际转换了。
三、天气接口对象展示
这里我们将总结 GSON 在处理百度天气 JSON 数据时的最佳实践和注意事项。通过实际案例的分析,分享如何优化代码结构、提高转换效率以及确保数据的准确性和完整性。本节将通过实际的代码运行来演示接口的调用和属性信息的打印。
1、接口调用
在前面的例子中,我们对天气的相关处理接口进行了详细的代码讲解,那么如何集成百度的天气查询接口并进行调用呢?下面以某具体区县为例,具体介绍如何记性接口的调用。
package com.yelang.project.unihttp;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.burukeyou.uniapi.http.core.response.HttpResponse;
import com.google.gson.Gson;
import com.yelang.project.thridinterface.BaiduWeatherApiServcie;
import com.yelang.project.weather.domain.BdWeatherDTO;
import com.yelang.project.weather.domain.WeatherInfoDTO;
import com.yelang.project.weather.service.IWeatherNowService;
@SpringBootTest
@RunWith(SpringRunner.class)
public class BaiduWeather2DBCase {private static final String DATA_TYPE = "all";@Autowiredprivate BaiduWeatherApiServcie baiduWeatherApiService;@Autowiredprivate IWeatherNowService weatherService;@Testpublic void bdWeather2PG() {String district_id = "430811";//表示具体的行政区划代号HttpResponse<String> result = baiduWeatherApiService.getWeather(district_id, DATA_TYPE);System.out.println(result.getBodyResult());Gson gson = new Gson();BdWeatherDTO bdWeatherInfo = gson.fromJson(result.getBodyResult(), BdWeatherDTO.class);WeatherInfoDTO bdResult = bdWeatherInfo.getResult();System.out.println(bdResult.getWeatherNow());System.out.println(bdResult.getAlerts());System.out.println(bdResult.getIndexes());System.out.println(bdResult.getForecasts());System.out.println(bdResult.getForecastHours());}
}
下一节我们将根据接口的实际调用结果来实现相关的信息打印。来看看我们的设置是否正确,返回的JavaBean是否符合预期。
2、Java属性打印输出
当我们在IDE中实际运行上述的代码时,可以清晰的在Eclipse的运行窗口中看到以下的输出:
可以明显的看到,上述已经将JSON数据转为了正常的JavaBean。来看一下控制台的信息输出如下:
在这里可以做一些时候的处理,比如格式化和解析等,做成插件似的......
rsp===>com.burukeyou.uniapi.http.core.response.UniHttpResponse@7828bc6b
{"status":0,"result":{"location":{"country":"中国","province":"湖南省","city":"张家界市","name":"武陵源","id":"430811"},"now":{"text":"多云","temp":29,"feels_like":31,"rh":81,"wind_class":"1级","wind_dir":"北风","prec_1h":0.0,"clouds":75,"vis":18900,"aqi":36,"pm25":25,"pm10":30,"no2":6,"so2":5,"o3":50,"co":0.6,"wind_angle":10,"uvi":0,"pressure":978,"dpt":25,"uptime":"20250810225500"},"indexes":[{"name":"晨练指数","brief":"不宜","detail":"有降水,建议在室内做适当锻炼。"},{"name":"洗车指数","brief":"不适宜","detail":"两天内有雨,雨水和泥水会弄脏爱车。"},{"name":"感冒指数","brief":"少发","detail":"感冒机率较低,避免长期处于空调屋中。"},{"name":"紫外线指数","brief":"最弱","detail":"辐射弱,涂擦SPF8-12防晒护肤品。"},{"name":"穿衣指数","brief":"热","detail":"适合穿T恤、短薄外套等���季服装。"},{"name":"运动指数","brief":"较不宜","detail":"有降水,推荐您在室内进行休闲运动。"}],"alerts":[],"forecasts":[{"text_day":"小雨","text_night":"中雨","high":29,"low":24,"wc_day":"<3级","wd_day":"东风","wc_night":"<3级","wd_night":"东风","date":"2025-08-10","week":"星期日"},{"text_day":"小雨","text_night":"小雨","high":29,"low":23,"wc_day":"<3级","wd_day":"东风","wc_night":"<3级","wd_night":"东风","date":"2025-08-11","week":"星期一"},{"text_day":"小雨","text_night":"大雨","high":29,"low":23,"wc_day":"<3级","wd_day":"东北风","wc_night":"<3级","wd_night":"西北风","date":"2025-08-12","week":"星期二"},{"text_day":"小雨","text_night":"小雨","high":32,"low":24,"wc_day":"<3级","wd_day":"东风","wc_night":"<3级","wd_night":"东风","date":"2025-08-13","week":"星期三"},{"text_day":"小雨","text_night":"小雨","high":33,"low":24,"wc_day":"<3级","wd_day":"东风","wc_night":"<3级","wd_night":"东北风","date":"2025-08-14","week":"星期四"},{"text_day":"小雨","text_night":"多云","high":32,"low":23,"wc_day":"<3级","wd_day":"南风","wc_night":"<3级","wd_night":"东南风","date":"2025-08-15","week":"星期五"},{"text_day":"小雨","text_night":"晴","high":35,"low":25,"wc_day":"<3级","wd_day":"西风","wc_night":"<3级","wd_night":"西北风","date":"2025-08-16","week":"星期六"}],"forecast_hours":[{"text":"小雨","temp_fc":30,"wind_class":"<3级","wind_dir":"东风","rh":93,"prec_1h":0.9,"clouds":99,"wind_angle":109,"pop":70,"uvi":0,"pressure":979,"dpt":28,"data_time":"2025-08-10 23:00:00"},{"text":"小雨","temp_fc":29,"wind_class":"<3级","wind_dir":"东风","rh":93,"prec_1h":0.9,"clouds":99,"wind_angle":106,"pop":60,"uvi":0,"pressure":979,"dpt":28,"data_time":"2025-08-11 00:00:00"},{"text":"中雨","temp_fc":29,"wind_class":"<3级","wind_dir":"东风","rh":93,"prec_1h":1.6,"clouds":99,"wind_angle":108,"pop":80,"uvi":0,"pressure":979,"dpt":28,"data_time":"2025-08-11 01:00:00"},{"text":"中雨","temp_fc":29,"wind_class":"<3级","wind_dir":"东风","rh":94,"prec_1h":1.6,"clouds":100,"wind_angle":107,"pop":70,"uvi":0,"pressure":980,"dpt":27,"data_time":"2025-08-11 02:00:00"},{"text":"中雨","temp_fc":28,"wind_class":"3~4级","wind_dir":"东风","rh":94,"prec_1h":1.6,"clouds":99,"wind_angle":99,"pop":80,"uvi":0,"pressure":979,"dpt":26,"data_time":"2025-08-11 03:00:00"},{"text":"小雨","temp_fc":27,"wind_class":"3~4级","wind_dir":"东风","rh":94,"prec_1h":0.3,"clouds":99,"wind_angle":93,"pop":60,"uvi":0,"pressure":978,"dpt":25,"data_time":"2025-08-11 04:00:00"},{"text":"阴","temp_fc":26,"wind_class":"3~4级","wind_dir":"东风","rh":94,"prec_1h":0.0,"clouds":99,"wind_angle":88,"pop":0,"uvi":0,"pressure":978,"dpt":24,"data_time":"2025-08-11 05:00:00"},{"text":"小雨","temp_fc":25,"wind_class":"3~4级","wind_dir":"东风","rh":93,"prec_1h":0.4,"clouds":99,"wind_angle":85,"pop":60,"uvi":0,"pressure":978,"dpt":24,"data_time":"2025-08-11 06:00:00"},{"text":"中雨","temp_fc":24,"wind_class":"<3级","wind_dir":"东风","rh":93,"prec_1h":1.6,"clouds":99,"wind_angle":81,"pop":80,"uvi":0,"pressure":979,"dpt":23,"data_time":"2025-08-11 07:00:00"},{"text":"中雨","temp_fc":24,"wind_class":"<3级","wind_dir":"东风","rh":93,"prec_1h":1.6,"clouds":100,"wind_angle":74,"pop":80,"uvi":0,"pressure":980,"dpt":22,"data_time":"2025-08-11 08:00:00"},{"text":"中雨","temp_fc":24,"wind_class":"<3级","wind_dir":"东风","rh":92,"prec_1h":1.6,"clouds":100,"wind_angle":72,"pop":80,"uvi":0,"pressure":979,"dpt":23,"data_time":"2025-08-11 09:00:00"},{"text":"小雨","temp_fc":25,"wind_class":"<3级","wind_dir":"东风","rh":91,"prec_1h":0.6,"clouds":100,"wind_angle":70,"pop":70,"uvi":0,"pressure":979,"dpt":23,"data_time":"2025-08-11 10:00:00"},{"text":"小雨","temp_fc":26,"wind_class":"<3级","wind_dir":"东风","rh":91,"prec_1h":0.3,"clouds":100,"wind_angle":68,"pop":60,"uvi":0,"pressure":979,"dpt":24,"data_time":"2025-08-11 11:00:00"},{"text":"小雨","temp_fc":26,"wind_class":"<3级","wind_dir":"东北风","rh":91,"prec_1h":0.6,"clouds":99,"wind_angle":50,"pop":70,"uvi":0,"pressure":978,"dpt":25,"data_time":"2025-08-11 12:00:00"},{"text":"中雨","temp_fc":27,"wind_class":"<3级","wind_dir":"东北风","rh":91,"prec_1h":1.6,"clouds":99,"wind_angle":37,"pop":80,"uvi":0,"pressure":978,"dpt":25,"data_time":"2025-08-11 13:00:00"},{"text":"中雨","temp_fc":28,"wind_class":"<3级","wind_dir":"东北风","rh":91,"prec_1h":1.6,"clouds":99,"wind_angle":27,"pop":80,"uvi":0,"pressure":978,"dpt":26,"data_time":"2025-08-11 14:00:00"},{"text":"中雨","temp_fc":28,"wind_class":"3~4级","wind_dir":"东北风","rh":90,"prec_1h":1.6,"clouds":99,"wind_angle":25,"pop":80,"uvi":0,"pressure":978,"dpt":26,"data_time":"2025-08-11 15:00:00"},{"text":"小雨","temp_fc":28,"wind_class":"3~4级","wind_dir":"东北风","rh":89,"prec_1h":0.7,"clouds":99,"wind_angle":24,"pop":70,"uvi":0,"pressure":978,"dpt":26,"data_time":"2025-08-11 16:00:00"},{"text":"小雨","temp_fc":29,"wind_class":"3~4级","wind_dir":"东北风","rh":89,"prec_1h":0.5,"clouds":99,"wind_angle":23,"pop":60,"uvi":0,"pressure":978,"dpt":26,"data_time":"2025-08-11 17:00:00"},{"text":"小雨","temp_fc":29,"wind_class":"<3级","wind_dir":"东北风","rh":88,"prec_1h":0.4,"clouds":98,"wind_angle":28,"pop":70,"uvi":0,"pressure":978,"dpt":27,"data_time":"2025-08-11 18:00:00"},{"text":"小雨","temp_fc":29,"wind_class":"<3级","wind_dir":"东北风","rh":87,"prec_1h":0.1,"clouds":98,"wind_angle":40,"pop":70,"uvi":0,"pressure":978,"dpt":27,"data_time":"2025-08-11 19:00:00"},{"text":"阴","temp_fc":30,"wind_class":"<3级","wind_dir":"东风","rh":87,"prec_1h":0.0,"clouds":98,"wind_angle":110,"pop":0,"uvi":0,"pressure":979,"dpt":27,"data_time":"2025-08-11 20:00:00"},{"text":"阴","temp_fc":28,"wind_class":"<3级","wind_dir":"东北风","rh":90,"prec_1h":0.0,"clouds":92,"wind_angle":57,"pop":0,"uvi":0,"pressure":979,"dpt":26,"data_time":"2025-08-11 21:00:00"},{"text":"阴","temp_fc":26,"wind_class":"3~4级","wind_dir":"东北风","rh":93,"prec_1h":0.0,"clouds":86,"wind_angle":45,"pop":0,"uvi":0,"pressure":979,"dpt":24,"data_time":"2025-08-11 22:00:00"}]},"message":"success"}
WeatherNow(pkId=null, locationCode=null, temp=29, feelsLike=31, rh=81, windClass=1级, windDir=北风, text=多云, prec1h=0.0, clouds=75, vis=18900, aqi=36, pm25=25, pm10=30, no2=6, so2=5, o3=50, co=0.6, uptime=2025-08-10 22:55:00.0)
[]
[WeatherIndexes(pkId=null, weatherPkId=null, name=晨练指数, brief=不宜, detail=有降水,建议在室内做适当锻炼。), WeatherIndexes(pkId=null, weatherPkId=null, name=洗车指数, brief=不适宜, detail=两天内有雨,雨水和泥水会弄脏爱车。), WeatherIndexes(pkId=null, weatherPkId=null, name=感冒指数, brief=少发, detail=感冒机率较低,避免长期处于空调屋中。), WeatherIndexes(pkId=null, weatherPkId=null, name=紫外线指数, brief=最弱, detail=辐射弱,涂擦SPF8-12防晒护肤品。), WeatherIndexes(pkId=null, weatherPkId=null, name=穿衣指数, brief=热, detail=适合穿T恤、短薄外套等夏季服装。), WeatherIndexes(pkId=null, weatherPkId=null, name=运动指数, brief=较不宜, detail=有降水,推荐您在室内进行休闲运动。)]
[WeatherForecasts(pkId=null, weatherPkId=null, date=Sun Aug 10 00:00:00 CST 2025, week=星期日, high=29, low=24, wcDay=<3级, wcNight=<3级, wdDay=东风, wdNight=东风, textDay=小雨, textNight=中雨), WeatherForecasts(pkId=null, weatherPkId=null, date=Mon Aug 11 00:00:00 CST 2025, week=星期一, high=29, low=23, wcDay=<3级, wcNight=<3级, wdDay=东风, wdNight=东风, textDay=小雨, textNight=小雨), WeatherForecasts(pkId=null, weatherPkId=null, date=Tue Aug 12 00:00:00 CST 2025, week=星期二, high=29, low=23, wcDay=<3级, wcNight=<3级, wdDay=东北风, wdNight=西北风, textDay=小雨, textNight=大雨), WeatherForecasts(pkId=null, weatherPkId=null, date=Wed Aug 13 00:00:00 CST 2025, week=星期三, high=32, low=24, wcDay=<3级, wcNight=<3级, wdDay=东风, wdNight=东风, textDay=小雨, textNight=小雨), WeatherForecasts(pkId=null, weatherPkId=null, date=Thu Aug 14 00:00:00 CST 2025, week=星期四, high=33, low=24, wcDay=<3级, wcNight=<3级, wdDay=东风, wdNight=东北风, textDay=小雨, textNight=小雨), WeatherForecasts(pkId=null, weatherPkId=null, date=Fri Aug 15 00:00:00 CST 2025, week=星期五, high=32, low=23, wcDay=<3级, wcNight=<3级, wdDay=南风, wdNight=东南风, textDay=小雨, textNight=多云), WeatherForecasts(pkId=null, weatherPkId=null, date=Sat Aug 16 00:00:00 CST 2025, week=星期六, high=35, low=25, wcDay=<3级, wcNight=<3级, wdDay=西风, wdNight=西北风, textDay=小雨, textNight=晴)]
[WeatherForecastHours(pkId=null, weatherPkId=null, text=小雨, tempFc=30, windClass=<3级, windDir=东风, rh=93, prec1h=0.9, clouds=99, dataTime=Sun Aug 10 23:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=小雨, tempFc=29, windClass=<3级, windDir=东风, rh=93, prec1h=0.9, clouds=99, dataTime=Mon Aug 11 00:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=中雨, tempFc=29, windClass=<3级, windDir=东风, rh=93, prec1h=1.6, clouds=99, dataTime=Mon Aug 11 01:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=中雨, tempFc=29, windClass=<3级, windDir=东风, rh=94, prec1h=1.6, clouds=100, dataTime=Mon Aug 11 02:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=中雨, tempFc=28, windClass=3~4级, windDir=东风, rh=94, prec1h=1.6, clouds=99, dataTime=Mon Aug 11 03:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=小雨, tempFc=27, windClass=3~4级, windDir=东风, rh=94, prec1h=0.3, clouds=99, dataTime=Mon Aug 11 04:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=阴, tempFc=26, windClass=3~4级, windDir=东风, rh=94, prec1h=0.0, clouds=99, dataTime=Mon Aug 11 05:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=小雨, tempFc=25, windClass=3~4级, windDir=东风, rh=93, prec1h=0.4, clouds=99, dataTime=Mon Aug 11 06:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=中雨, tempFc=24, windClass=<3级, windDir=东风, rh=93, prec1h=1.6, clouds=99, dataTime=Mon Aug 11 07:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=中雨, tempFc=24, windClass=<3级, windDir=东风, rh=93, prec1h=1.6, clouds=100, dataTime=Mon Aug 11 08:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=中雨, tempFc=24, windClass=<3级, windDir=东风, rh=92, prec1h=1.6, clouds=100, dataTime=Mon Aug 11 09:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=小雨, tempFc=25, windClass=<3级, windDir=东风, rh=91, prec1h=0.6, clouds=100, dataTime=Mon Aug 11 10:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=小雨, tempFc=26, windClass=<3级, windDir=东风, rh=91, prec1h=0.3, clouds=100, dataTime=Mon Aug 11 11:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=小雨, tempFc=26, windClass=<3级, windDir=东北风, rh=91, prec1h=0.6, clouds=99, dataTime=Mon Aug 11 12:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=中雨, tempFc=27, windClass=<3级, windDir=东北风, rh=91, prec1h=1.6, clouds=99, dataTime=Mon Aug 11 13:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=中雨, tempFc=28, windClass=<3级, windDir=东北风, rh=91, prec1h=1.6, clouds=99, dataTime=Mon Aug 11 14:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=中雨, tempFc=28, windClass=3~4级, windDir=东北风, rh=90, prec1h=1.6, clouds=99, dataTime=Mon Aug 11 15:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=小雨, tempFc=28, windClass=3~4级, windDir=东北风, rh=89, prec1h=0.7, clouds=99, dataTime=Mon Aug 11 16:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=小雨, tempFc=29, windClass=3~4级, windDir=东北风, rh=89, prec1h=0.5, clouds=99, dataTime=Mon Aug 11 17:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=小雨, tempFc=29, windClass=<3级, windDir=东北风, rh=88, prec1h=0.4, clouds=98, dataTime=Mon Aug 11 18:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=小雨, tempFc=29, windClass=<3级, windDir=东北风, rh=87, prec1h=0.1, clouds=98, dataTime=Mon Aug 11 19:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=阴, tempFc=30, windClass=<3级, windDir=东风, rh=87, prec1h=0.0, clouds=98, dataTime=Mon Aug 11 20:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=阴, tempFc=28, windClass=<3级, windDir=东北风, rh=90, prec1h=0.0, clouds=92, dataTime=Mon Aug 11 21:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=阴, tempFc=26, windClass=3~4级, windDir=东北风, rh=93, prec1h=0.0, clouds=86, dataTime=Mon Aug 11 22:00:00 CST 2025)]
四、总结
以上就是本文的主要内容,本文将深入探讨如何在 GSON 框架下,将百度天气的 JSON 数据转换为 JavaBean。首先,我们将详细分析百度天气 JSON 数据的结构特点。通过本文的深入解析和实战操作,读者将能够掌握 GSON 框架下将百度天气 JSON 数据转换为 JavaBean 的完整流程,从而在实际开发中更加高效地处理类似的 JSON 数据转换任务。无论你是初学者还是有一定经验的开发者,本文都将为你提供有价值的参考和指导,帮助你在 JSON 数据处理领域迈向更高的台阶。行文仓促,定有许多的不足之处,欢迎各位朋友在评论区批评指正,不胜感激。