说起JSON,大家就谈不上陌生了,因为对于数据传输语言,各位只认json,即使有XML语言,但是各位很少用吧。我也是,但是之前用过的json转换工具各种各样,我记忆中有过GSON(google)、fastJSON(阿里巴巴)、jsonlib等等。但是这次使用的JSONObject,我只是临时抱佛脚,为什么这样说?因为这次我是被逼着吃透了它处理对象和json、普通字符串和json之间的相互转化。

  最近在公司主要做接口开发,主要是通过和第三方机构联合开发接口,难免存在数据的共享和处理,大致需求就是我们调用第三方接口,他们的接口返回给我们一定格式的json数据,最后我们后台开发将数据处理成我们这边APP端所需的数据。因为公司使用的json工具是JSONObject,我只是熟悉(以前没怎么用过),但是内部的数据结构详细是如何及解析并处理成我们自己的数据的,我真的是懵着脑袋挺了2天,实在是难受,于是决定好好钻研一下,立马搭建个工程搞了起来。

  需求一:调用第三方接口返回json字符串,我们自己处理成所需格式的json数据?

  首先调用第三方接口返回的json字符串格式如下:

 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方法来处理。

 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();
String code = object.getString("code");
【示例代码二】
1 JSONArray jsonArray = object.getJSONObject("data").getJSONArray("list");    //获取小data中的list数据
total = object.getJSONObject("data").get("total").toString();           //获取小data中的total数据

  需求二:往JSONObject对象中添加属性及属性值,最后将JSONObjecct对象转成json数据返回?

  因为JSONObject对象存储数据的键值对儿的形式来存储的,类似于map集合存储数据,我们最关心的是如何将JSONObject对象转成json格式的字符串返给调用者,这就很简单了,不多说了,直接给各位上段代码吧。

     @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();
}

  其实对于json数据的处理就没什么可说的,我这次主要目的是想记录住JSONObject是如何操作一些字符串并如何获取层级值的,没什么技术含量,望大家需要时候瞅一眼。

  本文个人创建,如有错误请指正,共勉。

  

对于JSONObject,我只是临时抱佛脚的更多相关文章

  1. 使用JSONObject.fromObject的时候出现“There is a cycle in the hierarchy”异常 的解决办法

    在使用JSONObject.fromObject的时候,出现“There is a cycle in the hierarchy”异常.   意思是出现了死循环,也就是Model之间有循环包含关系: ...

  2. Gson将字符串转换成JsonObject和JsonArray

    以下均利用Gson来处理: 1.将bean转换成Json字符串: public static String beanToJSONString(Object bean) { return new Gso ...

  3. JSONObject、JSONArray区别

    json,就是一个键对应一个值,超级简单的一对一关系.现在用到的json那可以层层嵌套啊,刚开始接触的时候,确实有种崩溃的赶脚,不想去理,取个数据还那么麻烦.其实,就跟if else语句一样,如果if ...

  4. android JSON获取值String无法转换成JSONObject

    项目中,已经获取到服务器返回的XML,并且已经解析. value= (String) result.getProperty("Value").toString().trim();J ...

  5. JSONObject.fromObject(map)(JSON与JAVA数据的转换)

    JSON与JAVA数据的转换(JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互.) 上一篇文章中有这么 ...

  6. JSONObject put,accumulate,element的区别

    public Object put (Object key, Object value) 将value映射到key下.如果此JSONObject对象之前存在一个value在这个key下,当前的valu ...

  7. Json_异常_net.sf.json.JSONException: JSONObject["solution"] not found.

    net.sf.json.JSONException: JSONObject["solution"] not found. 没有这个元素造成的. 问题代码: JSONObject j ...

  8. JSONObject,JSONArray,Map,String之间转换

    http://blog.csdn.net/superit401/article/details/51727739 1.String转JSONObject String jsonMessage = &q ...

  9. JSONObject

    JAR包简介: commons-lang.jar commons-beanutils.jar commons-collections.jar commons-logging.jar ezmorph.j ...

随机推荐

  1. HTML ——Flex弹性布局

    弹性盒布局的使用 1.为父容器添加display:flex或inline-flex属性 (Webkit内核的浏览器,必须加上-webkit前缀.) 容器默认存在两根轴:主轴(main axis)和交叉 ...

  2. bzoj1013 [JSOI2008]球形空间产生器

    Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧毁 ...

  3. cmd第一次推送github

    echo off for %%i in ("%cd%") do set "name=%%~ni" git init git remote add origin ...

  4. linux优化之SElinux关闭

    查看selinux状态: # getenforce   注:Enforcing表示开启,Permissive表示禁用 临时关闭或开启selinux: # setenforce  [1|0]  注:1是 ...

  5. Mongodb以及rockmongo安装

    Mongodb安装 以centos6.x_x_64位系统为例,我们使用yum安装 1.添加yum源 在/etc/yum.repos.d/目录下创建文件10genmon.repo(名字随意,.repo结 ...

  6. 简单jQuery 实现手风琴菜单

    简单jQuery 实现手风琴菜单 css代码 如下: *{ margin: 0; padding: 0; } #accordion{ width: 500px; } #accordion>div ...

  7. RowSet的使用

    ResultSet是使用Jdbc编程的人入门和常用的操作数据库的类,自 JDK1.4开始,易于使用RowSet接口被引入.RowSet 接口扩展了标准java.sql.ResultSet接口.RowS ...

  8. 【JAVAWEB学习笔记】18_el&jstl&javaee的开发模式

    一.EL技术 1.EL 表达式概述 EL(Express Lanuage)表达式可以嵌入在jsp页面内部,减少jsp脚本的编写,EL 出现的目的是要替代jsp页面中脚本的编写. 2.EL从域中取出数据 ...

  9. cin 对象取值过程详解

    突然又空,鉴于对cin对象的去值机制还不是很了解,就探究一番,并且记下来,方便以后复习. #include <iostream> int main(void) { using namesp ...

  10. 使用公共 Registry - 每天5分钟玩转 Docker 容器技术(19)

    保存和分发镜像的最直接方法就是使用 Docker Hub. Docker Hub 是 Docker 公司维护的公共 Registry.用户可以将自己的镜像保存到 Docker Hub 免费的 repo ...