相关文章推荐
体贴的匕首  ·  objective-c和java下解析对象类 ...·  2 月前    · 
阳刚的熊猫  ·  在pytorch中停止梯度流的若干办法,避免 ...·  8 月前    · 
宽容的水桶  ·  使用java代码关闭指定端口的程序-wind ...·  1 年前    · 
朝气蓬勃的沙发  ·  [转载]python – ...·  1 年前    · 
睿智的充值卡  ·  Install Desktop ...·  1 年前    · 
豁达的西装  ·  cornerstone - 掘金·  1 年前    · 
Code  ›  对于JSONObject,我只是临时抱佛脚开发者社区
string data jsonobject gson解析json
https://cloud.tencent.com/developer/article/1028861
寂寞的警车
1 年前
作者头像
赵小忠
0 篇文章

对于JSONObject,我只是临时抱佛脚

前往专栏
腾讯云
备案 控制台
开发者社区
学习
实践
活动
专区
工具
TVP
文章/答案/技术大牛
写文章
社区首页 > 专栏 > 禁心尽力 > 正文

对于JSONObject,我只是临时抱佛脚

发布 于 2018-01-24 19:30:31
532 0
举报

说起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();
 9         // 模拟接口调用后获得的结果数据
10         String data = getData();
11         JSONObject object = JSONObject.fromObject(data);
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<jsonArray.size(); i++){
21                 String itemStr = jsonArray.get(i).toString();
22                 JSONObject itemObject = JSONObject.fromObject(itemStr);
23                 String id = itemObject.get("id").toString();
24                 String name = itemObject.get("itemName").toString();
25                 String price = itemObject.get("price").toString();
26                 dataJson.put("id", id);
27                 dataJson.put("name", name);
28                 dataJson.put("price", price);
30                 dataArray.add(dataJson);
31             }
32         }
33         Map<String,Object> map = new HashMap<String,Object>();
34         map.put("itemList", dataArray);
35         map.put("total", total);
37         // 根据APP端返回json数据
 
推荐文章
体贴的匕首  ·  objective-c和java下解析对象类型和数组类型JSON字符串 - 铭久
2 月前
阳刚的熊猫  ·  在pytorch中停止梯度流的若干办法,避免不必要模块的参数更新-腾讯云开发者社区-腾讯云
8 月前
宽容的水桶  ·  使用java代码关闭指定端口的程序-windows - 知乎
1 年前
朝气蓬勃的沙发  ·  [转载]python – Pandas使用groupby中的count来创建新列_pandas group by count-CSDN博客
1 年前
睿智的充值卡  ·  Install Desktop Experience on Windows Server 2012 R2, 2016, or 2019
1 年前
豁达的西装  ·  cornerstone - 掘金
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号