提及JSON,你们就谈不上陌生了,由于对于数据传输语言,各位只认json,即便有XML语言,可是各位不多用吧。我也是,可是以前用过的json转换工具各类各样,我记忆中有过GSON(google)、fastJSON(阿里巴巴)、jsonlib等等。此次使用的JSONObjectjava
需求一:调用第三方接口返回json字符串,咱们本身处理成所需格式的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方法来处理。app
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数据返回?google
由于JSONObject对象存储数据的键值对儿的形式来存储的,相似于map集合存储数据,咱们最关心的是如何将JSONObject对象转成json格式的字符串返给调用者,代码以下:code
@RequestMapping(value = "/jsonObjectTest",method=RequestMethod.GET) @ResponseBody public String jsonObjectTest(){ // 拼接返回的json数据 JSONObject returnJson = new JSONObject(); JSONObject dataJson = new JSONObject(); JSONArray dataArray = new JSONArray(); // 模拟接口调用后得到的结果数据 String data = getData(); JSONObject object = JSONObject.fromObject(data); // 获取状态码,若是是1表示调用成功,则获取数据集合和总记录数 // String code = object.get("code").toString(); String code = object.getString("code"); String total = null; if("1".equals(code)){ JSONArray jsonArray = object.getJSONObject("data").getJSONArray("list"); total = object.getJSONObject("data").get("total").toString(); for(int i=0; i<jsonArray.size(); i++){ String itemStr = jsonArray.get(i).toString(); JSONObject itemObject = JSONObject.fromObject(itemStr); String id = itemObject.get("id").toString(); String name = itemObject.get("itemName").toString(); String price = itemObject.get("price").toString(); dataJson.put("id", id); dataJson.put("name", name); dataJson.put("price", price); dataArray.add(dataJson); } } Map<String,Object> map = new HashMap<String,Object>(); map.put("itemList", dataArray); map.put("total", total); // 根据APP端返回json数据 String response = "{\"code\":\"200\",\"title\":\"成功\",\"message\":\"成功!\",\"style\":0}"; returnJson.element("data", map); returnJson.element("response", response); return returnJson.toString(); }