对于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<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);
29
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);
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是如何操作一些字符串并如何获取层级值的,没什么技术含量,望大家需要时候瞅一眼。
本文个人创建,如有错误请指正,共勉。
- 如何使用带有Dropout的LSTM网络进行时间序列预测
- 生信人写程序2. Editplus添加Perl, Shell, R, markdown模板和语法高亮
- Rfam 12.0+本地使用 (最新版教程)
- 宝马汽车安全漏洞详解:古有伯乐识良驹,今有黑客擒宝马
- string.length()与-1比较为什么会出现匪夷所思的结果
- css模块化及CSS Modules使用详解
- 使用OpenCV,Python和模板匹配来播放“Waldo在哪里?”
- C++ 字符串分割
- 算法笔记之排序
- java中String类学习
- React Native之ListView实现九宫格效果
- 迷宫问题(bfs的应用)
- 流量都去哪儿了 —— 三板斧搞定Android网络流量测试
- 富集分析DotPlot,可以服
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 总结一些ES不常用的filter
- 如何将炫酷的报表直接截图发送邮件——在Superset 0.37使用Schedule Email功能
- Kettle构建Hadoop ETL实践(五):数据抽取
- Kafka监控必备——Kafka-Eagle 2.0.2正式发布
- iOS Universal link 入门指南
- Flutter基础widgets教程-CupertinoAlertDialog篇
- Flutter基础widgets教程-cupertinoActivityIndicator篇
- Flutter基础widgets教程-Align篇
- 深入理解Linux内核进程上下文切换
- 面对疾风吧!io_uring 优化 nginx 实战演练
- 奇技淫巧:在 ssh 里面把服务器的文本复制到本地电脑
- 【计算机网络】学习笔记,第一篇:概述(谢希仁版)
- 【Objective-C】Objective-C语言的动态性
- Python解构与封装
- 关于内网穿透:NPS神器