天天看點

android學習筆記 Json解析

最近為了解析伺服器傳回的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;
	}
	
	
}