引入

什么是Fastjson

阿里官方给的定义是, fastjson 是阿里巴巴的开源JSON解析库,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean。

Fastjson的优点

  • 速度快
    fastjson相对其他JSON库的特点是快,从2011年fastjson发布1.1.x版本之后,其性能从未被其他Java实现的JSON库超越。
  • 使用广泛
    fastjson在阿里巴巴大规模使用,在数万台服务器上部署,fastjson在业界被广泛接受。在2012年被开源中国评选为最受欢迎的国产开源软件之一。
  • 测试完备
    fastjson有非常多的testcase,在1.2.11版本中,testcase超过3321个。每次发布都会进行回归测试,保证质量稳定。
  • 使用简单
    fastjson的 API 十分简洁。
  • 功能完备
    支持泛型,支持流处理超大文本,支持枚举,支持序列化和反序列化扩展。

序列化和反序列化

序列化和反序列化的定义:

Java序列化就是指把Java对象转换为字节序列的过程

Java反序列化就是指把字节序列恢复为Java对象的过程。

作用:

序列化最重要的作用:在传递和保存对象时.保证对象的完整性和可传递性。对象转换为有序字节流,以便在网络上传输或者保存在本地文件中。

反序列化的最重要的作用:根据字节流中保存的对象状态及描述信息,通过反序列化重建对象。

总结:

核心作用就是对象状态的保存和重建。(整个过程核心点就是字节流中所保存的对象状态及描述信息)

本栏目研究方法

采用自顶向下策略,主要研究我们平时最常用的两个方法:toJSONString(Object)和parseObject(String, Class)

受限于个人水平,一定有很多说的不对的地方,望大家理解指正

主要涉及的类

以下只是初步分析时所涉及的类,当具体分析类中的方法时会涉及到更多。遇到时,我们会再一一分析。

JSON

public abstract class JSON implements JSONStreamAware, JSONAware
是使用fastjson的主类,通常会调用它的这两个方法:

toJSONString(Object) //对象转json字符串

parseObject(String, Class) //字符串转对象

实现的接口:

public interface JSONAware

支持自定义JSON文本输出的bean应实现此接口

String toJSONString() //返回json文本

public interface JSONStreamAware

支持自定义JSON文本输出到编写器的bean应实现此接口

void writeJSONString(Appendable out) //将JSON字符串写入输出

JSONObject

public class JSONObject extends JSON implements Map<String, Object>, Cloneable, Serializable, InvocationHandler

字面意思,即JSON对象。

主要关注其实现了Map<String, Object>

可以把JSONObject 当成一个 Map<String,Object> 来看,只是 JSONObject 提供了更为丰富便捷的方法,方便我们对于对象属性的操作

使用上基本和Map一致

JSONArray

public class JSONArray extends JSON implements List, Cloneable, RandomAccess, Serializable

字面意思,即JSON对象数组。

主要关注其实现了List

可以把 JSONArray 看成 JSONObject 对象的一个集合

使用上基本和List一致

讨论方式

接下来会按照以下顺序来分析Fastjson

  1. JSONObject
  2. JSONArray
  3. JSON
  1. toJSONString(Object)
  2. parseObject(String, Class)

从某种意义上来说,JSONObject只是Map<String,Object>的扩展。因此其具体的方法与Map类似,只是在上面进行了一点点修改,使其更符合JSON的玩法。

JSONArray同上。

若有一定的java基础可以很轻松的读懂这两个类,所以本文将在下一节着重介绍它们小小的修改。正因为上述特性,你也可以直接跳过这两节。当以后分析中遇到有关问题时,我会再简单的说明它们。

而针对JSON类的分析,我们会采用自顶向下的方法,从应用到实现逐步深入。