目录

 

一、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"
}

资料

 JSON官网.