andoird開發中,關於使用GSON解析JSON時,怎麼寫實體類的問題?
我獲取了一個天氣api發回的json數據,可是不會解析了,是用於android開發的。
比如這段json數據:
{
"HeWeather data service 3.0": [
{
"aqi": {
"city": {
"aqi": "49",
"co": "0",
"no2": "19",
"o3": "120",
"pm10": "49",
"pm25": "22",
"qlty": "優",
"so2": "2"
}
},
"basic": {
"city": "北京",
"cnty": "中國",
"id": "CN101010100",
"lat": "39.904000",
"lon": "116.391000",
"update": {
"loc": "2015-08-28 19:44",
"utc": "2015-08-28 11:46"
}
}
}
]
}
特別是這個"HeWeather data service 3.0",不是說類裡面的屬性名必須跟Json欄位裡面的Key是一模一樣的才能保證解析正確么,可是這個"HeWeather data service 3.0"並不能作為java的成員變數名字。怎麼辦呢?
最好能給出這個的實體類。
import com.google.gson.annotations.SerializedName;
/**
* @author zilongzhou 天氣對象實體類 */public class WeatherInfo { @SerializedName("HeWeather data service 3.0") public ArrayList&public class WeatherData {
@SerializedName("aqi") public Aqi mAqi; @SerializedName("basic")public Basic mBasic;
public class Aqi {
@SerializedName("city") public City mCity;public class City {
@SerializedName("aqi") public String aqi; @SerializedName("co") public String co; @SerializedName("no2")public String no2;
@SerializedName("o3") public String o3; @SerializedName("pm10") public String pm10; @SerializedName("pm25") public String pm25; @SerializedName("qlty") public String qlty; @SerializedName("so2")public String so2;
} }public class Basic{
@SerializedName("city") public String city; @SerializedName("cnty") public String cnty; @SerializedName("id") public String lat;@SerializedName("lon")
public String lon; @SerializedName("update") public Update mUpdate; public class Update{ @SerializedName("loc") public String loc; @SerializedName("uct") public String uct;}
}
}
}渣命名求別噴,gettet setter方法就不想寫了SerializedName可以搞定了!
不過我想吐槽下「HeWeather data service 3.0」:不帶這麼玩的啊!key中帶空格我第一次見。不就是想加個API的描述嗎?加個「version」,「description」比這優雅多了。無法對應Java屬性的,請用SerializedName
總之請用擴展: GSONFormat就不需要手寫了√GsonFormat
順便填個不是安卓的坑,我剛剛拿js請求取值也碰到這個問題,最後是這樣把數據給取出來的:
var weather = response.data;
console.log(weather[HeWeather data service 3.0][0]);//請求了一個城市的天氣數據。
你可以先解析一層,取值轉成集合就好了
這個比較難, ,先看看
推薦閱讀:
※JsonPath —— JSON 解析神器
※零拷貝讀取文件成go對象
※如何用Python讀取開放數據?
※Bumpover.js - 牢固而趁手的數據校驗轉換庫
※一捅到底的架構