Java基础系列16:使用JSONObject和JSONArray解析和构造json字符串

本文详细介绍了如何使用 JSON-lib 在 Java 中构造和解析 JSON 字符串。通过具体示例展示了 JSONObject 和 JSONArray 的基本操作,包括节点插入、累积及元素方法等。

转自:https://www.zifangsky.cn/561.html


一 介绍

在Java开发中,我们通常需要进行XML文档或JSON字符串的构造和解析。当然在Java Web开发中有一些第三方插件是可以自动完成Java对象和json之间的转换的,比如:jackson插件(PS:关于jackson的基本使用可以参考下我以前写过的这篇文章:https://www.zifangsky.cn/380.html)。

不过为了能够更好地理解json字符串的构造和解析,我将使用JSON-lib包来手动完成对json的构造和一些基本方法的使用。JSON-lib包中最关键的两个类分别是JSONObject和JSONArray,我们可以简单地将JSONObject这个类构造的字符串理解成Map集合;将JSONArray这个类构造的字符串理解成List集合或者数组。当然,关于它们的一些基本使用我将在下面详细介绍

要想使用JSON-lib来完成json字符串的构造或者解析工作,除了需要json-lib-2.4-jdk15.jar这个jar包之外,还需要以下几个依赖jar包:

  • commons-beanutils-1.9.2.jar
  • commons-collections-3.2.2.jar
  • commons-lang-2.4.jar
  • commons-logging-1.1.3.jar
  • ezmorph-1.0.6.jar

当然,这几个jar包可以自行百度下载,也可以使用我用过的这几个jar包:http://pan.baidu.com/s/1hrGhTek

二 JSONObject的初步使用

(1)JSON字符串格式化:

在正式开始介绍json字符串的构造之前,我首先推荐一个在线的json格式化工具,可以将我们生成的json字符串格式化成比较直观的形式,便于我们查看,传送门:http://tool.oschina.net/codeformat/json

(2)JSON字符串的两种基本构造方法:

i)新建一个普通的Java工程,并导入上述的几个依赖包

ii)新建两个测试用的Java类:

Animal.java:

User.java:

iii)一个json字符串构造实例:

输出如下:

当然,我们可以看出现在这种json字符串的格式不是很友好,我们不能很直观的看出整个json的内在逻辑构成,因此需要对它进行格式化。在使用了我上面推荐的在线工具进行格式化之后,这两个json字符串分别是这样的:

这样就可以很清晰的看出整个json字符串的构成了。当然,上面生成json的代码都很简单,自己看一下就明白了,我这里就不多说了

三 JSONObject的几个常用方法以及对json字符串的解析实例

(1)JSONObject的put方法:

使用put方法可以在一个json中插入一个节点,如果该节点已经存在,那么该节点的值将会被替换

然后在主函数中调用执行该方法:

对输出的json字符串进行格式化之后,该json的格式如下所示:

(2)JSONObject的accumulate方法:

对于accumulate方法,如果节点不存在时,那么accumulate方法将和put方法一样在json中插入一个新节点;如果是一个已经存在的节点,那么将会在该节点上累积此次的值,形成一个数组的形式

然后同样是在主函数中调用执行这个方法,最后对输出的json字符串进行格式化之后,该json的格式如下所示:

(3)JSONObject的element方法:

据我所知,这个方法跟put方法的基本使用是一样的(PS:如果二者有使用不一样的,希望大家可以告诉我一下):

最后对输出的json字符串进行格式化之后,该json的格式如下所示:

(4)JSONArray的基本使用:

对于JSONObject和JSONArray这两个类,有的童鞋可能不是很明白二者的区别在哪里。其实很简单,JSONObject构造的字符串就像Map集合一样,是键值对的形式,即:Key:Value,多个键值对之间以英文逗号连接(PS:可以观察上面的那个json字符串)。于此同时,JSONArray构造的字符串就如List集合或者数组一样,是一个数组的形式,即:[array1,array2,array3 …]

比如说下面这个方法:

对输出的json字符串进行格式化之后,该json的格式如下所示:

从上面的json字符串可以看出,array这个键对应的值是一个JSONArray,也就是一个数组的形式

(5)解析json字符串实例:

输出如下:

其中,第一次输出是初始json字符串构造完成之后,将这个json字符串格式化之后是:

然后,在这个json中取出了键为“2”的json字符串,此时出现第二次输出:

从前面我介绍的JSONArray概念可以得知,这个字符串是可以构造成一个JSONArray类型的对象的。在构造完成之后,又取出了这个数组中的第三个值,此时得到了第三次的输出:

同理,对于这个字符串我们是可以转换成JSONObject对象的。最后就是根据键取出对应的值,此时出现最后的输出:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值