目錄
前言
一、百度天氣JSON
1、請求參數
2、返回參數
3、屬性映射
二、GSON屬性映射實戰
1、類對象映射
2、屬性字段映射
3、日期數據映射
三、天氣接口對象展示
1、接口調用
2、Java屬性打印輸出
四、總結
前言
????????在當今數字化時代,數據的高效處理與轉換已成為軟件開發中不可或缺的關鍵環節。JSON(JavaScript Object Notation)作為一種輕量級的數據交換格式,因其簡潔易讀、易于解析的特點,在眾多領域被廣泛應用,尤其是在網絡數據交互中。而 JavaBean 作為 Java 編程中一種重要的組件模式,能夠將數據封裝為對象,方便進行操作和管理。將 JSON 數據轉換為 JavaBean,不僅能夠提升數據的可操作性,還能更好地實現面向對象的設計理念。在眾多的 JSON 解析庫中,GSON 以其強大的功能、簡潔的 API 和高效的性能脫穎而出,成為開發者處理 JSON 數據的首選工具之一。GSON 提供了簡單易用的方法,能夠輕松地將 JSON 字符串轉換為 Java 對象,同時也支持將 Java 對象序列化為 JSON 字符串。這種雙向轉換的能力,使得 GSON 在處理復雜的 JSON 數據結構時表現出色,極大地簡化了開發流程。
????????本文將深入探討如何在 GSON 框架下,將百度天氣的 JSON 數據轉換為 JavaBean。首先,我們將詳細分析百度天氣 JSON 數據的結構特點。百度天氣的 JSON 數據包含多個層次和復雜的數據字段,如城市信息、天氣狀況、溫度、風力、空氣質量等。了解這些數據的結構,是實現準確轉換的前提。我們將通過實際的 JSON 數據樣例,逐步解析每個字段的含義和作用。其次我們將進入核心實戰環節。根據百度天氣 JSON 數據的結構,設計相應的 JavaBean 類。這些 JavaBean 類將作為數據的載體,用于存儲和操作天氣數據。我們將詳細介紹如何根據 JSON 字段定義 JavaBean 的屬性,以及如何通過 GSON 的注解和配置來實現精確的映射關系。通過具體的代碼實現,展示如何將復雜的百度天氣 JSON 數據轉換為 JavaBean 對象,并處理可能出現的常見問題,如字段缺失、數據類型不匹配等。最后,我們將總結 GSON 在處理百度天氣 JSON 數據時的最佳實踐和注意事項。通過實際案例的分析,分享如何優化代碼結構、提高轉換效率以及確保數據的準確性和完整性。同時,我們還將探討如何利用轉換后的 JavaBean 數據進行進一步的業務邏輯開發,例如數據展示、數據分析等,為讀者提供更全面的實戰指導。
????????通過本文的深入解析和實戰操作,讀者將能夠掌握 GSON 框架下將百度天氣 JSON 數據轉換為 JavaBean 的完整流程,從而在實際開發中更加高效地處理類似的 JSON 數據轉換任務。無論你是初學者還是有一定經驗的開發者,本文都將為你提供有價值的參考和指導,幫助你在 JSON 數據處理領域邁向更高的臺階。
一、百度天氣JSON
????????百度天氣作為國內知名的天氣信息服務提供商,其提供的天氣數據接口以 JSON 格式返回豐富的天氣信息,包括實時天氣、未來幾天的天氣預報、空氣質量等。這些數據對于開發天氣相關的應用(如天氣查詢應用、出行規劃應用等)具有極高的價值。然而,原始的 JSON 數據格式并不便于直接在 Java 應用中使用,這就需要我們將 JSON 數據轉換為 JavaBean,以便更好地進行數據處理和業務邏輯實現。為了更好的實現天氣的JSON到JavaBean的轉換,我們首先對百度天氣接口的請求參數、返回參數和屬性映射關系進行簡單介紹。
1、請求參數
????????為了方便第一次閱讀本文的朋友對百度的天氣接口也有一定的了解,本文首先對百度天氣的請求參數進行簡單介紹。如果在開發過程中已經非常熟悉相關的接口,可以直接進入下一個小節的內容。用戶可通過行政區劃代碼查詢實時天氣信息及未來5天天氣預報。
參數名稱 | 參數含義 | 默認值 | 字段類型 | 必選 |
---|---|---|---|---|
district_id | 區縣的行政區劃編碼,和location二選一 | 無 | string | 否 |
location | 經緯度,經度在前緯度在后,逗號分隔。支持類型:bd09mc/bd09ll/wgs84/gcj02。 | 無 | double | 否 |
ak | 開發者密鑰,可在API控制臺申請獲得 | 無 | string | 是 |
data_type | 請求數據類型。數據類型有:now/fc/index/alert/fc_hour/all,控制返回內容 | 無 | string | 是 |
output | 返回格式,目前支持json/xml | json | string | 否 |
coordtype | 支持類型:wgs84/bd09ll/bd09mc/gcj02 | wgs84 | string | 否 |
????????注意:如果district_id和location同時傳,默認以district_id為準;
2、返回參數
參數名 | 參數類型 | 描述信息 | 返回條件 | 異常值 |
---|---|---|---|---|
address | Object | 地理位置信息 | - | - |
country | String | 國家名稱 | 始終返回 | - |
province | String | 省份名稱 | 始終返回 | - |
city | String | 城市名稱 | 始終返回 | - |
name | String | 區縣名稱 | 始終返回 | - |
id | String | 區縣id | 始終返回 | - |
now | Object | 實況數據 | - | - |
temp | Int | 溫度(℃) | 始終返回 | 999999 |
feels_like | Int | 體感溫度(℃) | data_type=now/all | 999999 |
rh | Int | 相對濕度(%) | data_type=now/all | 999999 |
wind_class | String | 風力等級 | data_type=now/all | 暫無 |
wind_dir | String | 風向描述 | data_type=now/all | 暫無 |
text | String | 天氣現象 參考天氣取值對照表 | data_type=now/all | 暫無 |
prec_1h | Double | 1小時累計降水量(mm) | data_type=now/all | 999999 |
clouds | Int | 云量(%) | data_type=now/all | 999999 |
vis | Int | 能見度(m) | data_type=now/all | 999999 |
aqi | Int | 空氣質量指數數值 | data_type=now/all | 999999 |
pm25 | Int | pm2.5濃度(μg/m3) | data_type=now/all | 999999 |
pm10 | Int | pm10濃度(μg/m3) | data_type=now/all | 999999 |
no2 | Int | 二氧化氮濃度(μg/m3) | data_type=now/all | 999999 |
so2 | Int | 二氧化硫濃度(μg/m3) | data_type=now/all | 999999 |
o3 | Int | 臭氧濃度(μg/m3) | data_type=now/all | 999999 |
co | Double | 一氧化碳濃度(mg/m3) | data_type=now/all | 999999 |
uptime | String | 數據更新時間,北京時間 | data_type=now/all | - |
alert | ObjectArray | 氣象預警數據 | - | - |
type | String | 預警事件類型 參考?天氣取值對照表中的預警類型 | data_type=alert/all | 暫無 |
level | String | 預警事件等級 | data_type=alert/all | 暫無 |
title | String | 預警標題 | data_type=alert/all | - |
desc | String | 預警詳細提示信息 | data_type=alert/all | - |
indexes | ObjectArray | 生活指數數據 | - | - |
name | String | 生活指數中文名稱 | data_type=index/all | 暫無 |
brief | String | 生活指數概要說明 | data_type=index/all | 暫無 |
detail | String | 生活指數詳細說明 | data_type=index/all | 暫無 |
forecasts | ObjectArray | 預報數據 | - | - |
date | String | 日期,北京時區 | data_type=fc/all | - |
week | String | 星期,北京時區 | data_type=fc/all | - |
high | Int | 最高溫度(℃) | data_type=fc/all | 999999 |
low | Int | 最低溫度(℃) | data_type=fc/all | 999999 |
wc_day | String | 白天風力 | data_type=fc/all | 暫無 |
wc_night | String | 晚上風力 | data_type=fc/all | 暫無 |
wd_day | String | 白天風向 | data_type=fc/all | 暫無 |
wd_night | String | 晚上風向 | data_type=fc/all | 暫無 |
text_day | String | 白天天氣現象 參考天氣取值對照表 | data_type=fc/all | 暫無 |
text_night | String | 晚上天氣現象 參考天氣取值對照表 | data_type=fc/all | 暫無 |
wind_angle | Int | 風向角度(°) | data_type=now/all 且 user_type=vip | 999999 |
uvi | Int | 紫外線指數 | data_type=now/all 且 user_type=vip | 999999 |
pressure | Int | 氣壓(hPa) | data_type=now/all 且 user_type=vip | 999999 |
dpt | Int | 露點溫度(℃) | data_type=now/all 且 user_type=vip | 999999 |
????????除了未來幾天的天氣實況以外,未來24小時逐小時預報返回參數:
參數名 | 參數類型 | 描述信息 | 返回條件 | 異常值 |
---|---|---|---|---|
forecast_hours | Object Array | 預報數據 | - | - |
text | String | 天氣現象 參考天氣取值對照表 | data_type=fc_hour/all | "暫無" |
temp_fc | Int | 溫度(℃) | data_type=fc_hour/all | 999999 |
wind_class | String | 風力等級 | data_type=fc_hour/all | "暫無" |
wind_dir | String | 風向描述 | data_type=fc_hour/all | "暫無" |
rh | Int | 相對濕度 | data_type=fc_hour/all | 999999 |
prec_1h | Double | 1小時累計降水量(mm) | data_type=fc_hour/all | 999999 |
clouds | Int | 云量(%) | data_type=fc_hour/all | 999999 |
data_time | String | 數據時間 | data_type=fc_hour/all | 999999 |
wind_angle | Int | 風向角度(°) | data_type=fc_hour/all 且 user_type=vip | 999999 |
pop | Int | 降水概率(%) | data_type=fc_hour/all 且 user_type=vip | 999999 |
uvi | Int | 紫外線指數 | data_type=fc_hour/all 且 user_type=vip | 999999 |
pressure | Int | 氣壓(hPa) | data_type=fc_hour/all 且 user_type=vip | 999999 |
dpt | Int | 露點溫度(℃) | data_type=fc_hour/all 且 user_type=vip | 999999 |
????????在熟悉了請求參數和返回參數之后,我們來看一下通過接口實際返回的JSON數據。
3、屬性映射
????????關于如何使用公共的接口來封裝百度的調用key的內容,在之前的博文內容有所介紹,這里不進行贅述。這里將給出某區縣的返回結果:
????????通過返回的信息可以清晰的看出,百度的天氣接口返回當前天氣實況、告警信息、生活指數、未來逐日天氣預報和未來24小時的逐小時天氣預報。而這個接口規范將支持將這個JSON反序列化成JavaBean。
二、GSON屬性映射實戰
????????本節將進入核心實戰環節。根據百度天氣 JSON 數據的結構,設計相應的 JavaBean 類。這些 JavaBean 類將作為數據的載體,用于存儲和操作天氣數據。我們將詳細介紹如何根據 JSON 字段定義 JavaBean 的屬性,以及如何通過 GSON 的注解和配置來實現精確的映射關系。通過具體的代碼實現,展示如何將復雜的百度天氣 JSON 數據轉換為 JavaBean 對象,并處理可能出現的常見問題,如字段缺失、數據類型不匹配等。
1、類對象映射
????????為了實現將JSON字符串反序列化成JavaBean,我們需要定義一個跟JSON字符串想匹配的對象。其對應的屬性名稱應該較為相似,包括:狀態、天氣信息對象、響應消息字符串。核心代碼如下:
package com.yelang.project.weather.domain;
import java.io.Serializable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@NoArgsConstructor
@AllArgsConstructor
@Setter
@Getter
@ToString
public class BdWeatherDTO implements Serializable {private static final long serialVersionUID = -3963983158543661660L;private int status;private WeatherInfoDTO result;private String message;
}
????????注意這里最核心的對象是WeatherInfoDTO對象,直接存儲轉換對象信息。經過前面的JSON與JavaBean的對應關系可知,這個result對象包含著當前天氣信息、預警信息、生活指數信息和逐日天氣預報和未來24小時的逐小時預報。關鍵代碼如下:
package com.yelang.project.weather.domain;
import java.io.Serializable;
import java.util.List;
import com.google.gson.annotations.SerializedName;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@NoArgsConstructor
@AllArgsConstructor
@Setter
@Getter
@ToString
public class WeatherInfoDTO implements Serializable{private static final long serialVersionUID = 5849724792198940369L;private WeatherNow weatherNow;//實時天氣private List<WeatherAlerts> alerts;private List<WeatherIndexes> indexes;private List<WeatherForecasts> forecasts;private List<WeatherForecastHours> forecastHours;
}
????????篇幅有限,這里不能逐一展開,這里以生活指數的JavaBean的定義為例進行說明。其它的對象定義基本與接口返回的參數和說明基本一致,在此不一一進行列舉。
package com.yelang.project.weather.domain;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@NoArgsConstructor
@AllArgsConstructor
@Setter
@Getter
@ToString
public class WeatherIndexes implements Serializable{private static final long serialVersionUID = 498655771178931771L;@TableId(value ="pk_id")private Long pkId ;//主鍵@TableField(value="weather_pk_id")private Long weatherPkId;//實時天氣信息主鍵private String name;//生活指數中文名稱private String brief;//生活指數概要說明private String detail;//生活指數詳細說明
}
????????將實際的屬性信息完全列出來之后,下面就可以實現根據JSON屬性進行對象轉換。
2、屬性字段映射
眾所周知在JavaBean的編寫過程當中,我們的json的命名方式和Java不盡相同,兩者存在著較大的偏差,因此這就非常容易導致json的key值跟javabean的屬性名存在較大的不一致,那么此時又應該如何處理呢?其實Gson框架本身就存在這樣的考慮。如果遇到兩者的屬性名稱不一致的情況,直接使用@SerializedName("feels_like")來設置即可,如當前天氣信息對應的JavaBean:
????????經過以上的定義,其對應的屬性值就能正常的進行賦值。需要注意的是,在使用@SerializedName這個注解時,傳入的名稱應當是json文件的key值。這樣才能實現針對性的轉換。
3、日期數據映射
????????與屬性字段同時并存的一種情況是,在百度的天氣接口中,我們定義了一個Timestamp的數據類型,而在json接口中可能只是一個字符串,那么如何直接將字符串轉換成Timestamp呢?這時候就沒有直接的注解直接使用,需要我們自己來擴展出一個適配器來進行處理。首先我們定義一個Timestamp的適配器對象,然后在適配器中定義不同的轉換器來實現時間戳的格式化,關鍵代碼如下:
package com.yelang.project.weather.adapter;
import com.google.gson.TypeAdapter;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import java.io.IOException;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
/*** - 自定義時間戳轉換器,將百度天氣接口的字符串轉為時間類型* @author 夜郎king**/
public class TimestampTypeAdapter extends TypeAdapter<Timestamp>{private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");@Overridepublic void write(JsonWriter out, Timestamp value) throws IOException {if (value == null) {out.nullValue();} else {out.value(dateFormat.format(value));}}@Overridepublic Timestamp read(JsonReader in) throws IOException {String timestampString = in.nextString();try {return new Timestamp(dateFormat.parse(timestampString).getTime());} catch (ParseException e) {throw new IOException("Failed to parse timestamp: " + timestampString, e);}}
}
????????定義好適配器之后,接下來我們需要在JavaBean的配置當中來進行啟用,啟用的關鍵代碼如下,這里需要使用的注解是@JsonAdapter:
@JsonAdapter(TimestampTypeAdapter.class)
private Timestamp uptime;//數據更新時間,北京時間
????????經過以上幾步,基本就實現了基于GSON的json字符串與JavaBean的屬性映射設置。接下來就可以實現數據的實際轉換了。
三、天氣接口對象展示
????????這里我們將總結 GSON 在處理百度天氣 JSON 數據時的最佳實踐和注意事項。通過實際案例的分析,分享如何優化代碼結構、提高轉換效率以及確保數據的準確性和完整性。本節將通過實際的代碼運行來演示接口的調用和屬性信息的打印。
1、接口調用
? ? ? ? 在前面的例子中,我們對天氣的相關處理接口進行了詳細的代碼講解,那么如何集成百度的天氣查詢接口并進行調用呢?下面以某具體區縣為例,具體介紹如何記性接口的調用。
package com.yelang.project.unihttp;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.burukeyou.uniapi.http.core.response.HttpResponse;
import com.google.gson.Gson;
import com.yelang.project.thridinterface.BaiduWeatherApiServcie;
import com.yelang.project.weather.domain.BdWeatherDTO;
import com.yelang.project.weather.domain.WeatherInfoDTO;
import com.yelang.project.weather.service.IWeatherNowService;
@SpringBootTest
@RunWith(SpringRunner.class)
public class BaiduWeather2DBCase {private static final String DATA_TYPE = "all";@Autowiredprivate BaiduWeatherApiServcie baiduWeatherApiService;@Autowiredprivate IWeatherNowService weatherService;@Testpublic void bdWeather2PG() {String district_id = "430811";//表示具體的行政區劃代號HttpResponse<String> result = baiduWeatherApiService.getWeather(district_id, DATA_TYPE);System.out.println(result.getBodyResult());Gson gson = new Gson();BdWeatherDTO bdWeatherInfo = gson.fromJson(result.getBodyResult(), BdWeatherDTO.class);WeatherInfoDTO bdResult = bdWeatherInfo.getResult();System.out.println(bdResult.getWeatherNow());System.out.println(bdResult.getAlerts());System.out.println(bdResult.getIndexes());System.out.println(bdResult.getForecasts());System.out.println(bdResult.getForecastHours());}
}
????????下一節我們將根據接口的實際調用結果來實現相關的信息打印。來看看我們的設置是否正確,返回的JavaBean是否符合預期。
2、Java屬性打印輸出
????????當我們在IDE中實際運行上述的代碼時,可以清晰的在Eclipse的運行窗口中看到以下的輸出:
????????可以明顯的看到,上述已經將JSON數據轉為了正常的JavaBean。來看一下控制臺的信息輸出如下:
在這里可以做一些時候的處理,比如格式化和解析等,做成插件似的......
rsp===>com.burukeyou.uniapi.http.core.response.UniHttpResponse@7828bc6b
{"status":0,"result":{"location":{"country":"中國","province":"湖南省","city":"張家界市","name":"武陵源","id":"430811"},"now":{"text":"多云","temp":29,"feels_like":31,"rh":81,"wind_class":"1級","wind_dir":"北風","prec_1h":0.0,"clouds":75,"vis":18900,"aqi":36,"pm25":25,"pm10":30,"no2":6,"so2":5,"o3":50,"co":0.6,"wind_angle":10,"uvi":0,"pressure":978,"dpt":25,"uptime":"20250810225500"},"indexes":[{"name":"晨練指數","brief":"不宜","detail":"有降水,建議在室內做適當鍛煉。"},{"name":"洗車指數","brief":"不適宜","detail":"兩天內有雨,雨水和泥水會弄臟愛車。"},{"name":"感冒指數","brief":"少發","detail":"感冒機率較低,避免長期處于空調屋中。"},{"name":"紫外線指數","brief":"最弱","detail":"輻射弱,涂擦SPF8-12防曬護膚品。"},{"name":"穿衣指數","brief":"熱","detail":"適合穿T恤、短薄外套等���季服裝。"},{"name":"運動指數","brief":"較不宜","detail":"有降水,推薦您在室內進行休閑運動。"}],"alerts":[],"forecasts":[{"text_day":"小雨","text_night":"中雨","high":29,"low":24,"wc_day":"<3級","wd_day":"東風","wc_night":"<3級","wd_night":"東風","date":"2025-08-10","week":"星期日"},{"text_day":"小雨","text_night":"小雨","high":29,"low":23,"wc_day":"<3級","wd_day":"東風","wc_night":"<3級","wd_night":"東風","date":"2025-08-11","week":"星期一"},{"text_day":"小雨","text_night":"大雨","high":29,"low":23,"wc_day":"<3級","wd_day":"東北風","wc_night":"<3級","wd_night":"西北風","date":"2025-08-12","week":"星期二"},{"text_day":"小雨","text_night":"小雨","high":32,"low":24,"wc_day":"<3級","wd_day":"東風","wc_night":"<3級","wd_night":"東風","date":"2025-08-13","week":"星期三"},{"text_day":"小雨","text_night":"小雨","high":33,"low":24,"wc_day":"<3級","wd_day":"東風","wc_night":"<3級","wd_night":"東北風","date":"2025-08-14","week":"星期四"},{"text_day":"小雨","text_night":"多云","high":32,"low":23,"wc_day":"<3級","wd_day":"南風","wc_night":"<3級","wd_night":"東南風","date":"2025-08-15","week":"星期五"},{"text_day":"小雨","text_night":"晴","high":35,"low":25,"wc_day":"<3級","wd_day":"西風","wc_night":"<3級","wd_night":"西北風","date":"2025-08-16","week":"星期六"}],"forecast_hours":[{"text":"小雨","temp_fc":30,"wind_class":"<3級","wind_dir":"東風","rh":93,"prec_1h":0.9,"clouds":99,"wind_angle":109,"pop":70,"uvi":0,"pressure":979,"dpt":28,"data_time":"2025-08-10 23:00:00"},{"text":"小雨","temp_fc":29,"wind_class":"<3級","wind_dir":"東風","rh":93,"prec_1h":0.9,"clouds":99,"wind_angle":106,"pop":60,"uvi":0,"pressure":979,"dpt":28,"data_time":"2025-08-11 00:00:00"},{"text":"中雨","temp_fc":29,"wind_class":"<3級","wind_dir":"東風","rh":93,"prec_1h":1.6,"clouds":99,"wind_angle":108,"pop":80,"uvi":0,"pressure":979,"dpt":28,"data_time":"2025-08-11 01:00:00"},{"text":"中雨","temp_fc":29,"wind_class":"<3級","wind_dir":"東風","rh":94,"prec_1h":1.6,"clouds":100,"wind_angle":107,"pop":70,"uvi":0,"pressure":980,"dpt":27,"data_time":"2025-08-11 02:00:00"},{"text":"中雨","temp_fc":28,"wind_class":"3~4級","wind_dir":"東風","rh":94,"prec_1h":1.6,"clouds":99,"wind_angle":99,"pop":80,"uvi":0,"pressure":979,"dpt":26,"data_time":"2025-08-11 03:00:00"},{"text":"小雨","temp_fc":27,"wind_class":"3~4級","wind_dir":"東風","rh":94,"prec_1h":0.3,"clouds":99,"wind_angle":93,"pop":60,"uvi":0,"pressure":978,"dpt":25,"data_time":"2025-08-11 04:00:00"},{"text":"陰","temp_fc":26,"wind_class":"3~4級","wind_dir":"東風","rh":94,"prec_1h":0.0,"clouds":99,"wind_angle":88,"pop":0,"uvi":0,"pressure":978,"dpt":24,"data_time":"2025-08-11 05:00:00"},{"text":"小雨","temp_fc":25,"wind_class":"3~4級","wind_dir":"東風","rh":93,"prec_1h":0.4,"clouds":99,"wind_angle":85,"pop":60,"uvi":0,"pressure":978,"dpt":24,"data_time":"2025-08-11 06:00:00"},{"text":"中雨","temp_fc":24,"wind_class":"<3級","wind_dir":"東風","rh":93,"prec_1h":1.6,"clouds":99,"wind_angle":81,"pop":80,"uvi":0,"pressure":979,"dpt":23,"data_time":"2025-08-11 07:00:00"},{"text":"中雨","temp_fc":24,"wind_class":"<3級","wind_dir":"東風","rh":93,"prec_1h":1.6,"clouds":100,"wind_angle":74,"pop":80,"uvi":0,"pressure":980,"dpt":22,"data_time":"2025-08-11 08:00:00"},{"text":"中雨","temp_fc":24,"wind_class":"<3級","wind_dir":"東風","rh":92,"prec_1h":1.6,"clouds":100,"wind_angle":72,"pop":80,"uvi":0,"pressure":979,"dpt":23,"data_time":"2025-08-11 09:00:00"},{"text":"小雨","temp_fc":25,"wind_class":"<3級","wind_dir":"東風","rh":91,"prec_1h":0.6,"clouds":100,"wind_angle":70,"pop":70,"uvi":0,"pressure":979,"dpt":23,"data_time":"2025-08-11 10:00:00"},{"text":"小雨","temp_fc":26,"wind_class":"<3級","wind_dir":"東風","rh":91,"prec_1h":0.3,"clouds":100,"wind_angle":68,"pop":60,"uvi":0,"pressure":979,"dpt":24,"data_time":"2025-08-11 11:00:00"},{"text":"小雨","temp_fc":26,"wind_class":"<3級","wind_dir":"東北風","rh":91,"prec_1h":0.6,"clouds":99,"wind_angle":50,"pop":70,"uvi":0,"pressure":978,"dpt":25,"data_time":"2025-08-11 12:00:00"},{"text":"中雨","temp_fc":27,"wind_class":"<3級","wind_dir":"東北風","rh":91,"prec_1h":1.6,"clouds":99,"wind_angle":37,"pop":80,"uvi":0,"pressure":978,"dpt":25,"data_time":"2025-08-11 13:00:00"},{"text":"中雨","temp_fc":28,"wind_class":"<3級","wind_dir":"東北風","rh":91,"prec_1h":1.6,"clouds":99,"wind_angle":27,"pop":80,"uvi":0,"pressure":978,"dpt":26,"data_time":"2025-08-11 14:00:00"},{"text":"中雨","temp_fc":28,"wind_class":"3~4級","wind_dir":"東北風","rh":90,"prec_1h":1.6,"clouds":99,"wind_angle":25,"pop":80,"uvi":0,"pressure":978,"dpt":26,"data_time":"2025-08-11 15:00:00"},{"text":"小雨","temp_fc":28,"wind_class":"3~4級","wind_dir":"東北風","rh":89,"prec_1h":0.7,"clouds":99,"wind_angle":24,"pop":70,"uvi":0,"pressure":978,"dpt":26,"data_time":"2025-08-11 16:00:00"},{"text":"小雨","temp_fc":29,"wind_class":"3~4級","wind_dir":"東北風","rh":89,"prec_1h":0.5,"clouds":99,"wind_angle":23,"pop":60,"uvi":0,"pressure":978,"dpt":26,"data_time":"2025-08-11 17:00:00"},{"text":"小雨","temp_fc":29,"wind_class":"<3級","wind_dir":"東北風","rh":88,"prec_1h":0.4,"clouds":98,"wind_angle":28,"pop":70,"uvi":0,"pressure":978,"dpt":27,"data_time":"2025-08-11 18:00:00"},{"text":"小雨","temp_fc":29,"wind_class":"<3級","wind_dir":"東北風","rh":87,"prec_1h":0.1,"clouds":98,"wind_angle":40,"pop":70,"uvi":0,"pressure":978,"dpt":27,"data_time":"2025-08-11 19:00:00"},{"text":"陰","temp_fc":30,"wind_class":"<3級","wind_dir":"東風","rh":87,"prec_1h":0.0,"clouds":98,"wind_angle":110,"pop":0,"uvi":0,"pressure":979,"dpt":27,"data_time":"2025-08-11 20:00:00"},{"text":"陰","temp_fc":28,"wind_class":"<3級","wind_dir":"東北風","rh":90,"prec_1h":0.0,"clouds":92,"wind_angle":57,"pop":0,"uvi":0,"pressure":979,"dpt":26,"data_time":"2025-08-11 21:00:00"},{"text":"陰","temp_fc":26,"wind_class":"3~4級","wind_dir":"東北風","rh":93,"prec_1h":0.0,"clouds":86,"wind_angle":45,"pop":0,"uvi":0,"pressure":979,"dpt":24,"data_time":"2025-08-11 22:00:00"}]},"message":"success"}
WeatherNow(pkId=null, locationCode=null, temp=29, feelsLike=31, rh=81, windClass=1級, windDir=北風, text=多云, prec1h=0.0, clouds=75, vis=18900, aqi=36, pm25=25, pm10=30, no2=6, so2=5, o3=50, co=0.6, uptime=2025-08-10 22:55:00.0)
[]
[WeatherIndexes(pkId=null, weatherPkId=null, name=晨練指數, brief=不宜, detail=有降水,建議在室內做適當鍛煉。), WeatherIndexes(pkId=null, weatherPkId=null, name=洗車指數, brief=不適宜, detail=兩天內有雨,雨水和泥水會弄臟愛車。), WeatherIndexes(pkId=null, weatherPkId=null, name=感冒指數, brief=少發, detail=感冒機率較低,避免長期處于空調屋中。), WeatherIndexes(pkId=null, weatherPkId=null, name=紫外線指數, brief=最弱, detail=輻射弱,涂擦SPF8-12防曬護膚品。), WeatherIndexes(pkId=null, weatherPkId=null, name=穿衣指數, brief=熱, detail=適合穿T恤、短薄外套等夏季服裝。), WeatherIndexes(pkId=null, weatherPkId=null, name=運動指數, brief=較不宜, detail=有降水,推薦您在室內進行休閑運動。)]
[WeatherForecasts(pkId=null, weatherPkId=null, date=Sun Aug 10 00:00:00 CST 2025, week=星期日, high=29, low=24, wcDay=<3級, wcNight=<3級, wdDay=東風, wdNight=東風, textDay=小雨, textNight=中雨), WeatherForecasts(pkId=null, weatherPkId=null, date=Mon Aug 11 00:00:00 CST 2025, week=星期一, high=29, low=23, wcDay=<3級, wcNight=<3級, wdDay=東風, wdNight=東風, textDay=小雨, textNight=小雨), WeatherForecasts(pkId=null, weatherPkId=null, date=Tue Aug 12 00:00:00 CST 2025, week=星期二, high=29, low=23, wcDay=<3級, wcNight=<3級, wdDay=東北風, wdNight=西北風, textDay=小雨, textNight=大雨), WeatherForecasts(pkId=null, weatherPkId=null, date=Wed Aug 13 00:00:00 CST 2025, week=星期三, high=32, low=24, wcDay=<3級, wcNight=<3級, wdDay=東風, wdNight=東風, textDay=小雨, textNight=小雨), WeatherForecasts(pkId=null, weatherPkId=null, date=Thu Aug 14 00:00:00 CST 2025, week=星期四, high=33, low=24, wcDay=<3級, wcNight=<3級, wdDay=東風, wdNight=東北風, textDay=小雨, textNight=小雨), WeatherForecasts(pkId=null, weatherPkId=null, date=Fri Aug 15 00:00:00 CST 2025, week=星期五, high=32, low=23, wcDay=<3級, wcNight=<3級, wdDay=南風, wdNight=東南風, textDay=小雨, textNight=多云), WeatherForecasts(pkId=null, weatherPkId=null, date=Sat Aug 16 00:00:00 CST 2025, week=星期六, high=35, low=25, wcDay=<3級, wcNight=<3級, wdDay=西風, wdNight=西北風, textDay=小雨, textNight=晴)]
[WeatherForecastHours(pkId=null, weatherPkId=null, text=小雨, tempFc=30, windClass=<3級, windDir=東風, rh=93, prec1h=0.9, clouds=99, dataTime=Sun Aug 10 23:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=小雨, tempFc=29, windClass=<3級, windDir=東風, rh=93, prec1h=0.9, clouds=99, dataTime=Mon Aug 11 00:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=中雨, tempFc=29, windClass=<3級, windDir=東風, rh=93, prec1h=1.6, clouds=99, dataTime=Mon Aug 11 01:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=中雨, tempFc=29, windClass=<3級, windDir=東風, rh=94, prec1h=1.6, clouds=100, dataTime=Mon Aug 11 02:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=中雨, tempFc=28, windClass=3~4級, windDir=東風, rh=94, prec1h=1.6, clouds=99, dataTime=Mon Aug 11 03:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=小雨, tempFc=27, windClass=3~4級, windDir=東風, rh=94, prec1h=0.3, clouds=99, dataTime=Mon Aug 11 04:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=陰, tempFc=26, windClass=3~4級, windDir=東風, rh=94, prec1h=0.0, clouds=99, dataTime=Mon Aug 11 05:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=小雨, tempFc=25, windClass=3~4級, windDir=東風, rh=93, prec1h=0.4, clouds=99, dataTime=Mon Aug 11 06:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=中雨, tempFc=24, windClass=<3級, windDir=東風, rh=93, prec1h=1.6, clouds=99, dataTime=Mon Aug 11 07:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=中雨, tempFc=24, windClass=<3級, windDir=東風, rh=93, prec1h=1.6, clouds=100, dataTime=Mon Aug 11 08:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=中雨, tempFc=24, windClass=<3級, windDir=東風, rh=92, prec1h=1.6, clouds=100, dataTime=Mon Aug 11 09:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=小雨, tempFc=25, windClass=<3級, windDir=東風, rh=91, prec1h=0.6, clouds=100, dataTime=Mon Aug 11 10:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=小雨, tempFc=26, windClass=<3級, windDir=東風, rh=91, prec1h=0.3, clouds=100, dataTime=Mon Aug 11 11:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=小雨, tempFc=26, windClass=<3級, windDir=東北風, rh=91, prec1h=0.6, clouds=99, dataTime=Mon Aug 11 12:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=中雨, tempFc=27, windClass=<3級, windDir=東北風, rh=91, prec1h=1.6, clouds=99, dataTime=Mon Aug 11 13:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=中雨, tempFc=28, windClass=<3級, windDir=東北風, rh=91, prec1h=1.6, clouds=99, dataTime=Mon Aug 11 14:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=中雨, tempFc=28, windClass=3~4級, windDir=東北風, rh=90, prec1h=1.6, clouds=99, dataTime=Mon Aug 11 15:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=小雨, tempFc=28, windClass=3~4級, windDir=東北風, rh=89, prec1h=0.7, clouds=99, dataTime=Mon Aug 11 16:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=小雨, tempFc=29, windClass=3~4級, windDir=東北風, rh=89, prec1h=0.5, clouds=99, dataTime=Mon Aug 11 17:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=小雨, tempFc=29, windClass=<3級, windDir=東北風, rh=88, prec1h=0.4, clouds=98, dataTime=Mon Aug 11 18:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=小雨, tempFc=29, windClass=<3級, windDir=東北風, rh=87, prec1h=0.1, clouds=98, dataTime=Mon Aug 11 19:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=陰, tempFc=30, windClass=<3級, windDir=東風, rh=87, prec1h=0.0, clouds=98, dataTime=Mon Aug 11 20:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=陰, tempFc=28, windClass=<3級, windDir=東北風, rh=90, prec1h=0.0, clouds=92, dataTime=Mon Aug 11 21:00:00 CST 2025), WeatherForecastHours(pkId=null, weatherPkId=null, text=陰, tempFc=26, windClass=3~4級, windDir=東北風, rh=93, prec1h=0.0, clouds=86, dataTime=Mon Aug 11 22:00:00 CST 2025)]
四、總結
????????以上就是本文的主要內容,本文將深入探討如何在 GSON 框架下,將百度天氣的 JSON 數據轉換為 JavaBean。首先,我們將詳細分析百度天氣 JSON 數據的結構特點。通過本文的深入解析和實戰操作,讀者將能夠掌握 GSON 框架下將百度天氣 JSON 數據轉換為 JavaBean 的完整流程,從而在實際開發中更加高效地處理類似的 JSON 數據轉換任務。無論你是初學者還是有一定經驗的開發者,本文都將為你提供有價值的參考和指導,幫助你在 JSON 數據處理領域邁向更高的臺階。行文倉促,定有許多的不足之處,歡迎各位朋友在評論區批評指正,不勝感激。