当前位置: 首页 > news >正文

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

目录

前言

一、百度天气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/xmljsonstring
coordtype支持类型:wgs84/bd09ll/bd09mc/gcj02wgs84string

        注意:如果district_id和location同时传,默认以district_id为准;

2、返回参数

参数名参数类型描述信息返回条件异常值
addressObject地理位置信息--
countryString国家名称始终返回-
provinceString省份名称始终返回-
cityString城市名称始终返回-
nameString区县名称始终返回-
idString区县id始终返回-
nowObject实况数据--
tempInt温度(℃)始终返回999999
feels_likeInt体感温度(℃)data_type=now/all999999
rhInt相对湿度(%)data_type=now/all999999
wind_classString风力等级data_type=now/all暂无
wind_dirString风向描述data_type=now/all暂无
textString天气现象
参考天气取值对照表
data_type=now/all暂无
prec_1hDouble1小时累计降水量(mm)data_type=now/all999999
cloudsInt云量(%)data_type=now/all999999
visInt能见度(m)data_type=now/all999999
aqiInt空气质量指数数值data_type=now/all999999
pm25Intpm2.5浓度(μg/m3)data_type=now/all999999
pm10Intpm10浓度(μg/m3)data_type=now/all999999
no2Int二氧化氮浓度(μg/m3)data_type=now/all999999
so2Int二氧化硫浓度(μg/m3)data_type=now/all999999
o3Int臭氧浓度(μg/m3)data_type=now/all999999
coDouble一氧化碳浓度(mg/m3)data_type=now/all999999
uptimeString数据更新时间,北京时间data_type=now/all-
alertObjectArray气象预警数据--
typeString预警事件类型
参考 天气取值对照表中的预警类型
data_type=alert/all暂无
levelString预警事件等级data_type=alert/all暂无
titleString预警标题data_type=alert/all-
descString预警详细提示信息data_type=alert/all-
indexesObjectArray生活指数数据--
nameString生活指数中文名称data_type=index/all暂无
briefString生活指数概要说明data_type=index/all暂无
detailString生活指数详细说明data_type=index/all暂无
forecastsObjectArray预报数据--
dateString日期,北京时区data_type=fc/all-
weekString星期,北京时区data_type=fc/all-
highInt最高温度(℃)data_type=fc/all999999
lowInt最低温度(℃)data_type=fc/all999999
wc_dayString白天风力data_type=fc/all暂无
wc_nightString晚上风力data_type=fc/all暂无
wd_dayString白天风向data_type=fc/all暂无
wd_nightString晚上风向data_type=fc/all暂无
text_dayString白天天气现象
参考天气取值对照表
data_type=fc/all暂无
text_nightString晚上天气现象
参考天气取值对照表
data_type=fc/all暂无
wind_angleInt风向角度(°)data_type=now/all 且 user_type=vip999999
uviInt紫外线指数data_type=now/all 且 user_type=vip999999
pressureInt气压(hPa)data_type=now/all 且 user_type=vip999999
dptInt露点温度(℃)data_type=now/all 且 user_type=vip999999

        除了未来几天的天气实况以外,未来24小时逐小时预报返回参数:

参数名参数类型描述信息返回条件异常值
forecast_hoursObject Array预报数据--
textString天气现象
参考天气取值对照表
data_type=fc_hour/all"暂无"
temp_fcInt温度(℃)data_type=fc_hour/all999999
wind_classString风力等级data_type=fc_hour/all"暂无"
wind_dirString风向描述data_type=fc_hour/all"暂无"
rhInt相对湿度data_type=fc_hour/all999999
prec_1hDouble1小时累计降水量(mm)data_type=fc_hour/all999999
cloudsInt云量(%)data_type=fc_hour/all999999
data_timeString数据时间data_type=fc_hour/all999999
wind_angleInt风向角度(°)data_type=fc_hour/all 且 user_type=vip999999
popInt降水概率(%)data_type=fc_hour/all 且 user_type=vip999999
uviInt紫外线指数data_type=fc_hour/all 且 user_type=vip999999
pressureInt气压(hPa)data_type=fc_hour/all 且 user_type=vip999999
dptInt露点温度(℃)data_type=fc_hour/all 且 user_type=vip999999

        在熟悉了请求参数和返回参数之后,我们来看一下通过接口实际返回的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 数据处理领域迈向更高的台阶。行文仓促,定有许多的不足之处,欢迎各位朋友在评论区批评指正,不胜感激。

http://www.lryc.cn/news/617890.html

相关文章:

  • Mysql——Sql的执行过程
  • 从 0 到 1:用 MyCat 打造可水平扩展的 MySQL 分库分表架构
  • Linux-常用命令
  • 深入解析 resolv.conf 文件:DNS 配置的核心
  • 驱动_ConfigFS多级目录操作
  • 光功率dBm为何是负数?一文详解
  • Google OAuth 配置步骤指南,实现Google Drive文件同步功能。
  • UVM验证—UVM 简述
  • 快速了解TF-IDF算法
  • 逐际动力开源运控 tron1-rl-isaacgym 解读与改进
  • 自由学习记录(81)
  • 5B 参数,消费级显卡可部署:Wan2.2-TI2V-5B 本地部署教程,9分钟跑出电影级大片!
  • 【运维进阶】WEB 服务器
  • GB17761-2024标准与电动自行车防火安全的技术革新
  • Redis 数据结构及特点
  • 【工作笔记】Wrappers.lambdaQuery()用法
  • ROS2学习(1)—基础概念及环境搭建
  • JavaEE 初阶第十七期:文件 IO 的 “管道艺术”(下)
  • vscode新建esp32工程,没有sample_project怎么办?
  • 计算机网络:ovn数据通信都是用了哪些协议?
  • 应用层模拟面试题
  • C语言(06)——二、八、十、十六进制的相互转换
  • Effective C++ 条款35:考虑 virtual函数以外的其他选择
  • 【已解决】报错:WARNING: pip is configured with locations that require TLS/SSL
  • HarmonyOS 开发入门 第一章
  • 一文读懂 C# 中的 Lazy<T>
  • Python 在自动化办公汇总和脚本示例
  • 本地文件夹与 GitHub 远程仓库绑定并进行日常操作的完整命令流程
  • 【基本有序数组中找到有且仅有的一个无序元素并进行排序之顺序法】2022-10-12
  • Linux线程——线程控制及理解