1. 程式人生 > >android下基本json串的生成與解析

android下基本json串的生成與解析

以前就用過json串,不過是在java環境下面,如今轉移到android環境下,java裡面生成解析json串的jar包與android中自帶的衝突,所以也只能用安卓自帶的。

先前查網上的資料,感覺很多都說的很亂,直接給出了例子,也不解釋一下就算完成,他們自己肯定是明白的,但是讓讀者理解起來肯定有點難度。而且解析的方法很多,而這裡,我就介紹一種最原始最簡單的吧。希望我拙劣的表達能力不會影響到你們的理解。

首先我們先講一下json串格式

比如物件pet(寵物)

class pet{

int petid;//編號

String petname;//名稱

String pettype;//型別

}

那麼物件的json串形式就是

{"pet":[{"petid":1000,"petname":"name1","pettype":"type1"}]}

而如果我們建立多個pet物件,那麼字串形式就為:

{"pet":[{"petid":1000,"petname":"name1","pettype":"type1"},{"petid":1002,"petname":"name2","pettype":"type2"}]}

這裡定義的如果是int型,值就不要新增"號,如果String型別或者其他型別,則新增"。

一、生成json串

好了,下面我們來利用android自帶的JSONObject來建立一個json字串。

public String petToJson(Pet pet) {
		String jsonresult = "";//定義返回字串
		JSONObject object = new JSONObject();//建立一個總的物件,這個物件對整個json串
		try {
			JSONArray jsonarray = new JSONArray();//json陣列,裡面包含的內容為pet的所有物件
			JSONObject jsonObj = new JSONObject();//pet物件,json形式
			jsonObj.put("petid", pet.getPetid());//向pet物件裡面新增值
			jsonObj.put("petname", pet.getPetname());
			jsonObj.put("pettype", pet.getPettype());
			// 把每個資料當作一物件新增到數組裡
			jsonarray.put(jsonObj);//向json數組裡面新增pet物件
			object.put("pet", jsonarray);//向總物件裡面新增包含pet的陣列
                        jsonresult = object.toString();//生成返回字串
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		LogI("生成的json串為:"+jsonresult);
		return jsonresult;
	}

最後生成結果為:{"pet":[{"petid":100,"petname":"name1","pettype":"type1"}]}

當然,如果我們想生成多個物件,那麼只需要多呼叫幾次

jsonarray.put(jsonObj);//向json數組裡面新增pet物件
這個方法就可以了。

另外對於最外層的object我們可以這樣去理解,實際上我們生成的是

object{

List<pet> list;

}

這樣的型別,只不過最外面的object我們看不到而已。

解析json串

其實解析和生成是相對應的,怎麼樣生成的,那麼就應該怎麼樣返過來解析

傳入的json={"pet":[{"petid":100,"petname":"name1","pettype":"type1"}]}

public Pet jsonToPet(String json){
		if(json.startsWith("error")){//這裡可以做一下檢測,如果不是json格式的就直接返回
			return null;
		}
		Pet pet=new Pet();//準備返回的pet物件
		try {
			JSONObject jsonObject=new JSONObject(json);//我們需要把json串看成一個大的物件
			JSONArray jsonArray=jsonObject.getJSONArray("pet");//這裡獲取的是裝載有所有pet物件的陣列
			JSONObject jsonpet = jsonArray.getJSONObject(0);//獲取這個陣列中第一個pet物件
			
			String petid=jsonpet.getString("petid");//獲取pet物件的引數
			String petname=jsonpet.getString("petname");
			String pettype=jsonpet.getString("pettype");
			
			pet.setPetid(petid);//把引數新增到pet物件當中。
			pet.setPetid(petname);
			pet.setPetid(pettype);
		} catch (JSONException e) {
			e.printStackTrace();
		}
		LogI("json To Pet:"+pet.toString());//打印出pet物件引數。
		return pet;
	}

三、總結

其實json串的解析是很簡單的,當然本文章中我之舉了一個最簡單的例子。實際應用中傳入的json串並不是標準的。有可能是:[{"petid":100,"petname":"name1","pettype":"type1"}]這樣的,那麼對於這樣的很明顯這是一個數組形式,那麼我們就直接用

JSONArray jsonArray=new JSONArray(json);

來解析就可以了。

當然具體的形式還有很多種,但是我們只要分清物件和陣列這個相互包含的概念,就一定能夠解析出來。

本文為原創,歡迎轉載,但希望親們轉載的時候帶一下源連結。