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& HeWeatherDataList;

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 - 牢固而趁手的數據校驗轉換庫
一捅到底的架構

TAG:Android開發 | JSON | Android |