说到JSON相信大家都很熟悉,它是java web开发过程中常用的一种数据交互格式,做开发的同学每天都在和它打交道,但是大家真的对JSON认识的深刻吗?鄙人不才,在此之前虽然用了好久了但是还真没静下心来好好总结一下JSON的使用。最近公司开新项目趁着搭框架的时间,认真的查了一下JSON的相关知识,做个总结分享给大家~
一.JSON介绍
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式,采用一种“键:值”对的文本格式来存储和表示数据,在系统交换数据过程中常常被使用,是一种理想的数据交换语言。
二.JSON的形式与语法
JSON基本上分为两种表现形式,一种是JSON对象,一种是JSON数组。而这两种形式的结合会衍生出各种各样的Json字符串。
2.1 JSON对象
形式如下:
{
"id":1,
"username":"iterge",
"password":"123456"
}
上面就是一个JSON对象的数据形式,根据上面的数据形式可以总结如下语法:
1:数据在花括号中
2:数据以"键:值"对的形式出现(其中键多以字符串形式出现,值可取字符串,数值,甚至其他json对象)
3:每两个"键:值"对以逗号分隔(最后一个"键:值"对省略逗号)
遵守上面3点,便可以形成一个json对象。
2.2 JSON数组
形式如下:
[
{"username":"iterge","age":"20"},
{"username":"itsange","age":"18"},
{"username":"itsige","age":"16"}
]
这就是一个JSON数组的表示形式,得出以下语法:
1:数据在方括号中(可理解为数组)
2:方括号中每个数据以json对象形式出现
3:每两个数据以逗号分隔(最后一个无需逗号)
遵守上面3点,便可形成一个json对象数组(及一个数组中,存储了多个json对象)
2.3 两种基本形式的衍生
理解以上两种基本形式,接下来就可以衍生出你自己想要的任何形式的JSON格式的数据,如下:
{
"name":"iterge",
"brother":[
{"name":"itsange","age":"18"},
{"name":"itsige","age":"16"}],
"address":"Chain"
}
2.4 JSON字符串
说到字符串,大家那是再熟悉不过了,java中被""包裹着的数据就是字符串!
所以JSON字符串是什么呢?当然是被""包裹着的JSON对象或JSON数组或两者的混合咯,我真是个小机灵鬼呀~
三.fastjson的介绍与使用
3.1 fastjson的简介与引用
介绍:fastjson是阿里开发的一款专门用于Java开发的包,可以方便的实现json对象与JavaBean对象的转换,实现JavaBean对象与json字符串的转换,实现json对象与json字符串的转换。除了这个fastjson以外,还有Google开发的Gson包,以及springmvc默认的jackson包,无论哪一种最终实现的结果是一样,所以在这里建议一下,都了解是可以的,但一定要有个擅长的。
使用:在spring boot项目中可以直接在pom文件中引入其坐标,将其添加到项目中,如下
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
3.2 使用
导出jar后可以看到如下图中所示,包中会有JSON、JSONArray、JSONObject三个类,这三个类也是我们最常用的,也是上面讲JSON时与其对应的类。所以,JSONObject代表JSON对象、JSONArray代表JSON数组、JSON代表JSONObject和JSONArray的转化。
接下来看使用方法:
JSONObject
在idea界面快捷键Alt+7会出现如下图所示的窗口,然后选中JSONObject就可以看到这个类的所有方法了,注意看会发现类中主要是getxx()方法。因为JSONObject相当于json对象,所以该类中主要封装了各种get方法,通过"键:值"对中的键来获取其对应的值。且方法的输入参数几乎皆为String类型,这是因为json对象中,"键:值"对的键都是String类型的。
所以对于JSONObject的操作,将它当成普通对象操作就可以了,利用jsonobject.getxx()方法来获取自己想要的值。
JSONArray
同样选中JSONArray类,查看它所拥有的方法如下图,JSONArray的方法和list的类似(实际上JSONArray源码中可以看出它实现了List接口),又因为JSONArray代表JSON数组,所以类中的方法主要用于直接操作json对象。比如这其中的add(),remove(),containsAll()方法,对应于json对象的添加,删除与判断。
例如其中常用的getJSONObject方法,当输入参数为索引位置时,可以得到相应的JSONObject对象
public JSONObject getJSONObject(int index) {
Object value = this.list.get(index);
return value instanceof JSONObject ? (JSONObject)value : (JSONObject)toJSON(value);
}
JSON
方法如下图,分析可得JSON类中的方法主要是针对JSONObject和JSONArray的操作。主要是实现json对象,json对象数组,javabean对象,json字符串之间的相互转化。
下面说几个常用方法:
1.toJSONString(Object object)方法,实现将对象转化为json 字符串
2.parseObject(String text)方法,实现json字符串转换为json对象或javabean对象
3.parseArray(String text)方法,实现json字符串转化为json对象数组或List<T>
4.toJSON(Object javaObject)方法,实现javabean对象转化为json对象
5.toJavaObject(JSON json, Class<T> clazz)方法,实现json对象转化为javabean对象