引入
什么是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
- JSONObject
- JSONArray
- JSON
- toJSONString(Object)
- parseObject(String, Class)
从某种意义上来说,JSONObject只是Map<String,Object>的扩展。因此其具体的方法与Map类似,只是在上面进行了一点点修改,使其更符合JSON的玩法。
JSONArray同上。
若有一定的java基础可以很轻松的读懂这两个类,所以本文将在下一节着重介绍它们小小的修改。正因为上述特性,你也可以直接跳过这两节。当以后分析中遇到有关问题时,我会再简单的说明它们。
而针对JSON类的分析,我们会采用自顶向下的方法,从应用到实现逐步深入。