目录

前言

一、百度天气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.pswp.cn/bicheng/92918.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/92918.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/92918.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NAS技术在县级融媒体中心的架构设计与安全运维浅析

NAS技术在县级融媒体中心的架构设计与安全运维浅析 ——原理剖析、应用实践与防御体系建设作者&#xff1a;高级网络安全工程师 吉林•镇赉融媒 刘晓伟 最后更新&#xff1a;2025年8月 适用对象&#xff1a;媒体行业网络安全从业者一、NAS技术核心原理剖析 1. 基础架构 NAS&am…

CobaltStrike的搭建和使用

下载CobaltStrike环境建议使用jdk17&#xff0c;其他java版本有些功能可能无法使用通过网盘分享的文件&#xff1a;CS4.7key-mht.zip 链接: https://pan.baidu.com/s/1CRd1x4r6EIk14BD3UCLgxw?pwdevf4 提取码: evf4将下载的文件分别放在服务器和 本地/kali 上 也就是服务器为…

【Altium designer】一键给多个器件添加参数

目的: 一键给N个元器件/Part添加参数和修改参数值,比如一键给多个电阻添加“备注”并赋予备注的内容为“不焊接”,或者更改“备注”的内容为“不焊接”或空。 背景: 刚入门用AD画原理图,因为原理图的电阻、电容和芯片等等的冗余/兼容设计太多,增加备注不焊的元器件位号…

熟练掌握switch语句:技巧与运用

目录 一、switch语句基础 基本语法结构&#xff1a; 在C/C中&#xff1a; 注意事项&#xff1a; 二、if与switch语句对比 示例&#xff1a;计算整数除以3的余数 使用if语句实现&#xff1a; 使用switch语句实现&#xff1a; 三、break语句的作用 示例&#xff08;无br…

【03】厦门立林科技——立林科技 嵌入式 校招笔试,题目记录及解析

厦门立林科技——立林科技 嵌入式 校招笔试&#xff0c;题目记录及解析 1.下面的程序的输出是&#xff08;&#xff09;。2.在头文件中#ifndef/#define/#endif的作用是4.执行下面程序中的输出语句后,输出的结果是()6.在32位处理器上,运行如下程序后p的值为()。10.设有两字符串“…

C++算法(数据结构)版

C算法&#xff08;数据结构&#xff09;版 有些题目不是完整的题目&#xff0c;如需查看完整的题目请移步到acwing的算法基础课中 文章目录C算法&#xff08;数据结构&#xff09;版单链表思路&#xff1a;双链表思路&#xff1a;栈思路&#xff1a;队列思路&#xff1a;单调栈…

算法训练营DAY57 第十一章:图论part07

prim算法精讲 53. 寻宝&#xff08;第七期模拟笔试&#xff09; 题目描述&#xff1a; 在世界的某个区域&#xff0c;有一些分散的神秘岛屿&#xff0c;每个岛屿上都有一种珍稀的资源或者宝藏。国王打算在这些岛屿上建公路&#xff0c;方便运输。 不同岛屿之间&#xff0c;…

最短路问题从入门到负权最短路

一&#xff0c;BFS层次最短路/*题目描述 题目描述 给出一个 N 个顶点 M 条边的无向无权图&#xff0c;顶点编号为 1∼N。 问从顶点 1 开始&#xff0c;到其他每个点的最短路有几条。 输入格式 第一行包含 2 个正整数 N,M&#xff0c;为图的顶点数与边数。 接下来 M 行&#xff…

AI智能体小白入门指南

AI智能体小白入门指南 ——什么是AI智能体&#xff1f;它们如何工作&#xff1f; 一、AI智能体是什么&#xff1f; AI智能体&#xff08;AI Agent&#xff09;是能感知环境、自主决策并执行动作的人工智能系统。 类比理解&#xff1a;像一个“虚拟机器人”或“数字助手”&#…

《设计模式》策略模式

1.策略模式定义 策略模式&#xff08;Strategy Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一组算法&#xff0c;将每个算法封装起来&#xff0c;并使它们可以相互替换&#xff0c;从而让算法的变化独立于使用它的客户&#xff08;Client&#xff09;。 换…

AWS DMS 深度解析:从迁移任务到复制任务 - 全流程指南与最佳实践

AWS Database Migration Service (DMS) 是一项强大的云服务,用于在源数据库和目标数据库之间安全地迁移数据。其核心优势在于支持几乎零停机时间的迁移,这主要归功于其“变更数据捕获 (CDC)”功能。理解迁移任务 (Migration Task) 和复制任务 (Replication Task) 的关系与操作…

国企社招 | 中国邮政2025年社会招聘开启

添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 原文链接&#xff1a;“邮”你“政”好 | 广东邮政2025年社会…

linux添加自启动

linux添加自启动 配置步骤&#xff1a; 创建systemd服务文件 sudo nano /etc/systemd/system/tme-vod.service将下面artifact中的内容复制到该文件中。 [Unit] DescriptionTME VOD Service Afternetwork.target[Service] Typesimple Userroot Grouproot WorkingDirectory/data/…

轻量级解决方案:如何高效处理Word转PDF?

文档格式转换时&#xff0c;手动逐个处理总显得效率低下。它的体积小巧&#xff0c;不到1MB&#xff0c;且无界面设计&#xff0c;运行极简&#xff1a;将其与Word文件放入同一目录&#xff0c;双击启动&#xff0c;程序便会自动完成所有文档的PDF转换。操作零复杂度&#xff0…

Redis 数据倾斜

Redis 数据倾斜指的是在 Redis 集群模式下&#xff0c;数据&#xff08;以及相应的访问请求和负载&#xff09;在各个分片&#xff08;Shard&#xff09;之间分布严重不均匀的现象。这会导致部分节点成为热点或超载&#xff0c;而其他节点资源闲置&#xff0c;最终引发性能瓶颈…

Java基础-TCP通信(多发多收和一发一收)

目录 案例要求&#xff1a; 实现思路&#xff1a; 代码&#xff1a; User:客户端 Client:服务端 总结&#xff1a; 案例要求&#xff1a; 实现TCP通信的多发多收和一发一收,多发多收去掉各自的while循环就是一发一收,本文只模拟一发一收 实现思路&#xff1a; 客户端(U…

WinForm 对话框的 Show 与 ShowDialog:阻塞与非阻塞的抉择

目录 核心概念&#xff1a;阻塞与非阻塞 Show 与 ShowDialog 的详细对比 代码示例&#xff1a;两种方式的实现差异 使用 Show () 显示非模态对话框 使用 ShowDialog () 显示模态对话框 适用场景分析 适合使用 Show () 的场景 适合使用 ShowDialog () 的场景 最佳实践与…

晓知识: 动态代理与静态代理的区别

动态代理与静态代理的区别 代理模式是一种常见的设计模式&#xff0c;用于在不修改原始类的情况下扩展其功能。代理分为静态代理和动态代理两种&#xff0c;它们在实现方式、适用场景和灵活性上有显著差异。 静态代理 静态代理在编译时就已经确定代理类和被代理类的关系。代理类…

Linux系统编程Day9 -- gdb (linux)和lldb(macOS)调试工具

往期内容回顾 Git 教程&#xff08;初阶&#xff09; 基于Linux系统知识的第一个程序 自动化构建工具-make/Makefile gcc/g编译及链接 Vim工具的使用 Linux常用工具&#xff08;yum与vim&#xff09; 一、 Linux 下的调试工具 GDB 一、为什么要学习 GDB&#xff1f; 调试是开发…

数据结构(17)排序(下)

一、计数排序计数排序又称为鸽巢原理&#xff0c;是对哈希直接定址法的变形应用。操作步骤如下&#xff1a;①统计相同元素出现的次数 ②根据统计的结果将序列回收到原来的序列中比如&#xff0c;现在有一个数组{6,1,2,9,4,2,4,1,4}。该数组中&#xff0c;元素1出现两次&#…