當前位置:
首頁 > 知識 > 對於JSONObject,我只是臨時抱佛腳

對於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");

【示例代碼二】
1

JSONArray 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是如何操作一些字元串並如何獲取層級值的,沒什麼技術含量,望大家需要時候瞅一眼。

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

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 科技優家 的精彩文章:

linux exec操作文件描述符
python協程1:yield的使用
Azure經典門戶創建VM,如何設置使用靜態IP地址?
Mina 報文監聽器NioDatagramAcceptor一

TAG:科技優家 |

您可能感興趣

JSONObject 轉換時出錯 InvocationTargetException