最近為了解析伺服器傳回的Json資料,專門學習了Gson的解析方法。
想要用到Gson的解析方法,就必須導入谷歌公司提供的Gson的jar包,我導入的是gson-2.3.1-with-sources-javadoc.jar,大家可以自行到官網上下載下傳下來。
Gson下載下傳官網:點選打開連結
我以下面這個Json資料為列:
{
"resultcode": "0",
"resultmsg": "success",
"data": {
"accountid": "14",
"reserveset": "true",
"imid": "123",
"user": {
"uid": "15",
"username": "123",
"realname": "",
"realid": "",
"securityid": "",
"birthday": "",
"age": "",
"img": "http://dx.ie1e.com//images/head.png",
"phone": "18144058813",
"province": "",
"city": "",
"county": "",
"street": ""
}
}
}
我先建立了三個實體類:Message、Data、User。
要注意的是,每個實體類裡面的屬性要和Json資料裡面的标簽一一對應。
Message類:
public class Message {
private String resultcode;
private String resultmsg;
private JsonObject data;
public String getResultcode() {
return resultcode;
}
public void setResultcode(String resultcode) {
this.resultcode = resultcode;
}
public String getResultmsg() {
return resultmsg;
}
public void setResultmsg(String resultmsg) {
this.resultmsg = resultmsg;
}
public JsonObject getData() {
return data;
}
public void setData(JsonObject data) {
this.data = data;
}
}
Data類:
public class Data {
private String accountid;
private String reserveset;
private JsonObject user;
public String getAccountid() {
return accountid;
}
public void setAccountid(String accountid) {
this.accountid = accountid;
}
public String getReserveset() {
return reserveset;
}
public void setReserveset(String reserveset) {
this.reserveset = reserveset;
}
public JsonObject getUser() {
return user;
}
public void setUser(JsonObject user) {
this.user = user;
}
}
User類:
public class User {
private String uid;
private String imid;
private String username;
private String realname;
private String realid;
private String securityid;
private String birthday;
private String age;
private String img;
private String phone;
private String province;
private String city;
private String county;
private String street;
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
public String getImid() {
return imid;
}
public void setImid(String imid) {
this.imid = imid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getRealname() {
return realname;
}
public void setRealname(String realname) {
this.realname = realname;
}
public String getRealid() {
return realid;
}
public void setRealid(String realid) {
this.realid = realid;
}
public String getSecurityid() {
return securityid;
}
public void setSecurityid(String securityid) {
this.securityid = securityid;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getImg() {
return img;
}
public void setImg(String img) {
this.img = img;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getCounty() {
return county;
}
public void setCounty(String county) {
this.county = county;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
}
然後我定義了一個工具類來解析Json資料。
public class ParseJson {
/**
* 解析Json資料
*
* @author LY
* @param context上下文對象 result伺服器傳回結果 obj對應的實體類
*/
@SuppressWarnings("unchecked")
public static <T> Object parseMessage(Context context, String result,
Class<T> obj) {
JsonObject object = null;
T t = null;
if (!TextUtils.isEmpty(result)) {
GsonBuilder builder = new GsonBuilder();
Gson gson = builder.create();
Message message = gson.fromJson(result, Message.class);
int resultcode = message.getResultcode();
object = message.getData();
t = (T) parseData(context, object.toString(), obj);
return t;
}
}
// resultcode解析成功後解析相應的data(做的項目由于傳回成功後才回繼續解析接下來的JsonObject,是以加了這個方法)
public static <T> Object parseData(Context context, String result,
Class<T> obj) {
T t = null;
if (!TextUtils.isEmpty(result)) {
GsonBuilder builder = new GsonBuilder();
Gson gson = builder.create();
t = gson.fromJson(result, obj);
}
return t;
}
}