目录
一、JSON是什么?
二、序列化和反序列化
三、JSON两种数据结构和表示形式
四、Java语言的常见JSON库
五、JSON的应用场景
资料
一、JSON是什么?
1、JSON:JavaScript Object Notation(JavaScript对象表示法)。
2、JSON 是轻量级的文本数据交换格式。和 XML类似,比 XML更小、更快,更易解析。
3、JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。 目前非常多的动态(PHP,JSP,.NET)编程语言都支持JSON。
4、JSON 语法简单,具有自我描述性,易于阅读和编写;同时也易于机器的解析和生成。
因为以上这些特点,JSON成为当前最流行的数据传输格式。
二、序列化和反序列化
序列化:把对象转化为JSON格式的字符串,这样才能够通过网络传递给其他计算机。
反序列化:将接收到的JSON字符串转化成对象,进行业务处理。
三、JSON两种数据结构和表示形式
1、JSON两种数据结构
(1)“名称:值”对,中间用逗号分隔组成的集合,表示对象。 如:
{"name":"张三","age":"18"}
(2)值的有序列表,表示数组。如:
["张三","李四","王五"]
2、JSON的数据类型
String、number、boolean、Object、Array、null
3、JSON常见表示形式
(1)对象表示
{"name":"张三","age":"18"}
(2)数组形式
简单数组:
["张三","李四","王五"]
复杂数组:
["张三",12,true,false,null,{"key":"value"},[1,2,3]]
以及基于以上形式的组合嵌套。
四、Java语言的常见JSON库
1、FastJson(项目地址:https://github.com/alibaba/fastjson)
Fastjson是一个Java语言编写的高性能的JSON处理器,由阿里巴巴公司开发。无依赖,不需要例外额外的jar,能够直接跑在JDK上。
2、gson
Gson(项目地址:https://github.com/google/gson)
Gson由Google公司开发,在2008年5月公开发布了第一个版本。Gson是目前功能最全的Json解析器,序列化和反序列化主要通过toJson与fromJson两个转换函数,无依赖,不需要例外额外的jar,能够直接跑在JDK上。Gson可以实现将复杂类型的json到bean或bean到json的转换。
3、Jackson(项目地址:https://github.com/FasterXML/jackson)
相比json-lib框架,Jackson所依赖的jar包较少,简单易用并且性能也要相对高些。而且Jackson社区相对比较活跃,更新速度也比较快。Jackson对于复杂类型的json转换bean会出现问题,一些集合Map,List的转换出现问题。Jackson对于复杂类型的bean转换Json,转换的json格式不是标准的Json格式。
4、JSONP(https://jsonp.java.net/)
JSONP (JSON Processing)是Oracle官方处理JSON的一套Java API,是JSR353规范的一个开源实现。
5、Json-lib(项目地址:http://json-lib.sourceforge.net/index.html)
json-lib最开始的也是应用最广泛的json解析工具,json-lib 不好的地方确实是依赖于很多第三方包,包括commons-beanutils.jar,commons-collections-3.2.jar,commons-lang-2.6.jar,commons-logging-1.1.1.jar,ezmorph-1.0.6.jar,对于复杂类型的转换,json-lib对于json转换成bean还有缺陷,比如一个类里面会出现另一个类的list或者map集合,json-lib从json到bean的转换就会出现问题。json-lib在功能和性能上面都不能满足现在互联网化的需求。
五、JSON的应用场景
1、程序中前后台数据的交互
当前比较流行的前后台分离的开发方式,前后台开发人员需要确定统一的数据格式,这个时候JSON格式就是比较好的选择。
2、企业开放API接口的对接
JSON实际上已经成为数据交互的一种标准,像支付宝的开放接口大部分请求和响应的数据格式都是JSON,如创建订单的响应:
{
"alipay_trade_create_response":{
"code":"10000",
"msg":"Success",
"out_trade_no":"20150423001001",
"trade_no":"2015042321001004720200028594"
},
"sign":"ERITJKEIJKJHKKKKKKKHJEREEEEEEEEEEE"
}