GSON 框架下百度天气 JSON 数据转 JavaBean 的实战攻略

发布于:2025-08-12 ⋅ 阅读:(16) ⋅ 点赞:(0)

目录

前言

一、百度天气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");

    @Override
    public void write(JsonWriter out, Timestamp value) throws IOException {
        if (value == null) {
            out.nullValue();
        } else {
            out.value(dateFormat.format(value));
        }
    }

    @Override
    public 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";
	@Autowired
	private BaiduWeatherApiServcie baiduWeatherApiService;
	@Autowired
	private IWeatherNowService weatherService;
	@Test
	public 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 数据处理领域迈向更高的台阶。行文仓促,定有许多的不足之处,欢迎各位朋友在评论区批评指正,不胜感激。