网站首页 > java教程 正文
作者:咪博士
身为一名 Java 程序员,如果要处理 Json 数据,你大抵听说过下面一些类库: Jackson , google gson , json-lib , flexjson , json-io , genson , fastjson 。不过,咪博士在这里不打算和大家探讨这些类库的性能问题(网络上已经有许多关于这些 Json 类库的性能比较,请自行 Google)。咪博士想和大家说的是,在用 Java 进行 Json 数据的构造和解析时,如果写出像动态语言(如Python)一样,简洁、优雅的代码。
答案是:使用 mjson 类库!
你可以在MVN Repository中找到它
http://mvnrepository.com/artifact/org.sharegov/mjson
不说废话,直接上代码,然后听咪博士同大家细细分享。
首先,请牢记,mjson 中最重要的类就是 Json,几乎所有的操作和数据都围绕着 Json 类展开。
实例1:构造简单的Json数据
13 行:使用 Json.object() 开始构造一个JsonObject,要添加属性-值,只需要不断地调用其 set 方法。重点是 set 方法返回类型也是 Json,所以,你可以像示例代码中那样,直接多次串联调用 set 方法,代码相当简洁。
16 行:怎么把 Json 对象转换成符合Json格式的字符串呢?没错!就用大家最熟悉的toString 方法,就是这么简单。
21 行: 如果我有一个符合 Json 格式的字符串,我要如何构造相应的Json 对象呢?答案是使用 read 方法,mjson 会帮你搞定一切的。
实例2:解析简单的Json数据
44 行: 判断一个 JsonObject 是否包含某一属性,使用 has 方法
47 行:获取某个属性的值,先使用at 方法,得到相应的Json对象,然后再根据具体的数据类型,调用类似 asXXX 方法。例如,字符串类型就调用 asString 方法;整型就调用 asInteger 方法。
实例3:构造复杂(嵌套)的Json数据
mjson中构造 JsonArray 有2种方法:
(1) 使用 Json.array(),然后,多次串联调用 add 方法,往Json 数据中添加元素 (例如 63 行代码)
(2) 使用 Java 标准的数据类型,如 Map, List 等,然后在设置属性值的时候,直接使用 Map 或 List。mjson 会非常聪明地把它们转换为 JsonArray(例如 73 行代码)
实例4: 解析复杂(嵌套)的Json数据
mjson 中解析 JsonArray 也有2种方法:
(1) 如果每个数组元素,又是一个 JsonObject,调用 asJsonList 方法,得到 List<Json> 列表,然后上一个 for 循环,你就可以为所欲为了。(参考:95 - 99 行代码)
(2) 如果每个数组元素,只是一些简单的数据类型,如字符串等,不包含更复杂的结构,那么就先调用 asList 方法,得到 List<Object> 列表,同样用一个 for 循环,依次遍历处理这些列表元素即可。当然,请不要忘了将列表元素拆箱成你需要数据类型。(参考:104 - 107 行代码)
咪博士小结:
1. 如 mjson 作者所言,当初其在项目中使用 json 在前端和后台程序间传递数据,前端对 json 数据的处理,十分简洁,而后端使用 Java 处理 Json,总是无比繁琐。他寻遍整个互联网,竟然找不到一个简洁易用的 Json 处理类库,于是就模仿动态语言,编写了 mjson。
2. mjson 的主要优势在于代码简洁,速度方面并没做严格的测试,但对于绝大多数项目,json 的处理应该不会成为多大的性能瓶颈,有兴趣的朋友可以做下性能测试。
3. mjson 尤其擅长处理格式不固定的 Json 数据。Java 中其他的 Json 类库,基本都是在 bean 和 json 之间来回倒腾,其基本假设是你的 Json 数据格式是固定不变的。而在一些应用场景中,例如 Restful 服务中,Json 格式往往是不断变化的,这个时候,就到了 mjson 大显身手的时候了(事实上,mjson的作者当时做的项目就是 Restful 服务)。
?本文由爱跑咪原创,如需转载,请注明出处。
?---------------------------------------------
关注 “ 爱跑咪 ” 微信公众号,
咪博士和你一起码代码
猜你喜欢
- 2024-10-28 JavaScript获取json中key所对应的value值的简单方法
- 2024-10-28 为什么JSON.parse会损坏大数字,如何解决这个问题?
- 2024-10-28 深入浅出Json-Schema-Validation(深入浅出stm)
- 2024-10-28 这几个JSON 工具,你是不是错过了
- 2024-10-28 深入解析 JSONPath:从入门到精通(jsonpath解析json)
- 2024-10-28 《Servlet》第18节:HttpServletResponse响应JSON和HTML内容
- 2024-10-28 netty系列之:netty中的核心解码器json
- 2024-10-28 Android JSON(android json to room)
- 2024-10-28 一种适合懒人的JSON解析方式(json解析工具哪个好用)
- 2024-10-28 JAVA实现生成多层JSON格式数据(含源码——三层样例)
你 发表评论:
欢迎- 07-15采用Oracle OSB总线进行服务注册和接入
- 07-15javaEE 新闻管理系统 oracle11+tomcat6
- 07-15从Oracle演进看数据库技术的发展(oracle数据库发展史)
- 07-15如何升级oracle数据库安全补丁(oraclepsu补丁升级)
- 07-15【权威发布】关于Oracle WebLogic Server未授权远程代码执行高危漏洞的预警通报
- 07-15【mykit-data】 数据库同步工具(数据库表同步工具)
- 07-15[Java速成] 数据库基础,Connector/J、JDBC、JPA的关系(day 7)
- 07-15Google前工程主管“入住”Oracle(google浏览器找不到以前的书签)
- 最近发表
-
- 采用Oracle OSB总线进行服务注册和接入
- javaEE 新闻管理系统 oracle11+tomcat6
- 从Oracle演进看数据库技术的发展(oracle数据库发展史)
- 如何升级oracle数据库安全补丁(oraclepsu补丁升级)
- 【权威发布】关于Oracle WebLogic Server未授权远程代码执行高危漏洞的预警通报
- 【mykit-data】 数据库同步工具(数据库表同步工具)
- [Java速成] 数据库基础,Connector/J、JDBC、JPA的关系(day 7)
- Google前工程主管“入住”Oracle(google浏览器找不到以前的书签)
- Oracle数据库云服务系列新增前所未有的企业级功能
- 直播预告丨如何实现Oracle存储过程到java的一键转化
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)