Android JSON基本介紹與範例
=================首先介紹JSON================
JSON 全名為 JavaScript Object Notation ,在Android網路傳輸資料時經常會使用JSON結構來儲存資料而 JSON 又包含了 JSONObject 與 JSONArray , JSONObject 就是JSON格式的物件, JSONArray 為JSONObject所組成的陣列
在 JSONObject 包含一個欄位key與內容,如:
{"欄位Key":"資訊內容"}
(欄位Key為String,資訊內容可以為各種型態,如int、boolean、String...等)
當然物件內不會單純只有一筆資料,如:
{"欄位Key":"資訊內容","欄位Key":"資訊內容","欄位Key":"資訊內容"}
JSONArray則是許多JSONObject組成,如:
[{"欄位Key":"資訊內容"},{"欄位Key":"資訊內容"},{"欄位Key":"資訊內容"},{"欄位Key":"資訊內容"}]
可以發現物件是使用大括號{}包覆資料,陣列是使用中括號[]包覆物件
JSON也可以靈活的組裝擁有很多變化,如JSONObject內包含JSONObject,在包含JSONArray....等等各類型一層一層包覆,相對的解析也要一層一層解
=================JSON應用=================
-------------範例1:JSONObject內包覆一個JSONObject
在封裝時:
//用來包覆的JSON物件 JSONObject json_obj_2 = new JSONObject(); //用來當內層被包覆的JSON物件 //首先將2號JSON物件存好內容 json_obj_2.put("id",2); json_obj_2.put("info","內層物件訊息"); //將1號JSON物件存好內容 json_obj_1.put("id",1); json_obj_1.put("info","外層物件訊息"); //再來將2號物件設好key並丟進1號物件 json_obj_1.put("obj",json_obj_2); //最後json_obj_1內容印出(當JSON+"\n"就可成為String印出,在傳輸時也必須用JSON+"\n") Log.i("text", "json_obj_1="+json_obj_1+"\n");
最後印出結果為:
{"id":1,"info":"外層物件訊息","obj":{"id":2,"info":"內層物件訊息"}}
接收時拆解方法為:
//一開始從網路接收通常為String型態,tmp為接收到的String,為避免串流內有其他資料只需抓取{}間的內容 tmp=tmp.substring(tmp.indexOf("{"), tmp.lastIndexOf("}") + 1); JSONObject json_read=new JSONObject(tmp); //將資料丟進JSONObject //接下來選擇型態使用get並填入key取值 int id_1=json_read.getInt("id"); String info_1=json_read.getString("info"); JSONObject json_obj=json_read.getJSONObject("obj"); int id_2=json_obj.getInt("id"); String info_2=json_obj.getString("info");
---------------範例2:JSONObject內包覆一個JSONArray
在封裝時:
//用來包覆JSONArray的JSON物件 JSONObject json_obj_arr = new JSONObject(); //用來當內層被丟進陣列內的JSON物件 JSONArray json_arr = new JSONArray(); //JSON陣列 //首先將要丟進陣列內的JSON物件存好內容後丟進陣列 for(int i=0;i<3;i++){ json_obj_arr.put("id",i); json_obj_arr.put("info","陣列內的物件訊息"); json_arr.put(json_obj_arr); } //將JSON物件存好內容 json_obj.put("id",1); json_obj.put("info","外層物件訊息"); //再來將JSON陣列設定key丟進JSON物件 json_obj.put("arr",json_arr); //最後json_obj內容印出(當JSON+"\n"就可成為String印出,在傳輸時也必須用JSON+"\n") Log.i("text", "json_obj="+json_obj+"\n");
最後印出結果為:
{"id":1,"info":"外層物件訊息","arr":[{"id":0,"info":"陣列內的物件訊息"},{"id":1,"info":"陣列內的物件訊息"},{"id":2,"info":"陣列內的物件訊息"}]}
接收時拆解方法為:
//一開始從網路接收通常為String型態,tmp為接收到的String,為避免串流內有其他資料只需抓取{}間的內容 tmp=tmp.substring(tmp.indexOf("{"), tmp.lastIndexOf("}") + 1); JSONObject json_read=new JSONObject(tmp); //將資料丟進JSONObject //接下來選擇型態使用get並填入key取值 int id_obj=json_read.getInt("id"); String info_obj=json_read.getString("info"); JSONArray json_arr=json_read.getJSONArray("arr"); for(int i=0;i<3;i++){ //用for抓陣列內每個物件的資料 int id_arr=json_arr.get(i).getInt("id"); String info_arr=json_arr.get(i).getString("info"); }
===============補充=====================
以上是示範JSON格式的2種封裝與讀取方式,拆解與封裝還是要先跟伺服器端溝通傳送與接收的資料
在陣列類型(Boolean[]、String[]、int[]...等)要丟進JSONArray其實有另一個簡單的方法:
int[] i={11,22,33,44,55}; JSONArray json_arr=new JSONArray(i); //在new JSONArray時直接將陣列丟進去即可
我目前使用到的地方只有在HTTP傳輸跟Socket傳輸時使用,等以後有應用到更多東西時再回來補充
文章標籤
全站熱搜
留言列表