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.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出現兩次&#…