您的位置:首頁>正文

對於JSONObject,我只是臨時抱佛腳

說起JSON, 大家就談不上陌生了, 因為對於資料傳輸語言, 各位只認json, 即使有XML語言, 但是各位很少用吧。 我也是, 但是之前用過的json轉換工具各種各樣, 我記憶中有過GSON(google)、fastJSON(阿裡巴巴)、jsonlib等等。 但是這次使用的JSONObject, 我只是臨時抱佛腳, 為什麼這樣說?因為這次我是被逼著吃透了它處理物件和json、普通字串和json之間的相互轉化。

最近在公司主要做介面開發, 主要是通過和協力廠商機構聯合開發介面, 難免存在資料的共用和處理, 大致需求就是我們調用協力廠商介面, 他們的介面返回給我們一定格式的json資料, 最後我們後臺開發將資料處理成我們這邊APP端所需的資料。

因為公司使用的json工具是JSONObject, 我只是熟悉(以前沒怎麼用過), 但是內部的資料結構詳細是如何及解析並處理成我們自己的資料的, 我真的是懵著腦袋挺了2天, 實在是難受, 於是決定好好鑽研一下, 立馬搭建個工程搞了起來。

需求一:調用協力廠商介面返回json字串, 我們自己處理成所需格式的json資料?

首先調用協力廠商介面返回的json字串格式如下:

1 data="{"status":"查詢成功","data":{"total":143,"list":[{"exceptionnum":"28","areacn":"余杭區","areaid":"330110000000000000","comnum":"150"},{"exceptionnum":"22","areacn":"拱墅區","areaid":"330105000000000000","comnum":"97"},{"exceptionnum":"22","areacn":"蕭山區","areaid":"330109000000000000","comnum":"178"},......]},"code":"1"}"

其次我們需要處理成我們自己的json資料。 首先呢就是需要將字串資料轉成JSONObject物件後, 才可以調用它的一系列API方法來處理。

1 JSONObject object = JSONObject.fromObject(data);

最後根據上面給出的data資料格式分析得出, 它的內部資料結構是鍵值對的形式存儲資料的,

但是我們在這裡需要注意的是, JSONObject獲取資料是有講究的。 如果獲取之後是一個簡單字串就可以用get或getString方法來獲取, 比如獲取上面的code的值[示例代碼一]。 如果想獲取data中的list集合資料, 則不能直接用get或getString方法了, 必須用getJSONArray方法來獲取, 但是這時還得注意層級關係, 因為list在data裡面的小data中嵌套著, 所以得先獲取到小data之後然後才能通過小data獲取list資料[示例代碼二]。

【示例代碼一】
1 //String code = object.get("code").toString; 2 String code = object.getString("code");【示例代碼二】
1JSONArray jsonArray = object.getJSONObject("data").getJSONArray("list");//獲取小data中的list資料 2 total = object.getJSONObject("data").get("total").toString; //獲取小data中的total資料

需求二:往JSONObject物件中添加屬性及屬性值, 最後將JSONObjecct物件轉成json資料返回?

因為JSONObject物件存儲資料的鍵值對兒的形式來存儲的, 類似于map集合存儲資料, 我們最關心的是如何將JSONObject物件轉成json格式的字串返給調用者, 這就很簡單了, 不多說了,

直接給各位上段代碼吧。

1 @RequestMapping(value = "/jsonObjectTest",method=RequestMethod.GET) 2 @ResponseBody 3 public String jsonObjectTest{ 4 // 拼接返回的json資料 5 JSONObject returnJson = new JSONObject; 6 JSONObject dataJson = new JSONObject; 7 JSONArray dataArray = new JSONArray; 8 9 // 類比介面調用後獲得的結果資料 10 String data = getData; 11 JSONObject object = JSONObject.fromObject(data); 12 13 // 獲取狀態碼, 如果是1表示調用成功, 則獲取資料集合和總記錄數 14 // String code = object.get("code").toString; 15 String code = object.getString("code"); 16 String total = null; 17 if("1".equals(code)){ 18 JSONArray jsonArray = object.getJSONObject("data").getJSONArray("list"); 19 total = object.getJSONObject("data").get("total").toString; 20 for(int i=0; i map = new HashMap; 34 map.put("itemList", dataArray); 35 map.put("total", total); 36 37 // 根據APP端返回json資料 38 String response = "{"code":"200","title":"成功","message":"成功!","style":0}"; 39 returnJson.element("data", map); 40 returnJson.element("response", response); 41 42 return returnJson.toString; 43 }

其實對於json資料的處理就沒什麼可說的, 我這次主要目的是想記錄住JSONObject是如何操作一些字串並如何獲取層級值的, 沒什麼技術含量, 望大家需要時候瞅一眼。

本文個人創建, 如有錯誤請指正, 共勉。

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示