json解析原理之Gson
目标:了解json对象解析的大概过程
在这个序列化和反序列化的过程中,Gson充当的了一个解析器的角色。
第一阶段:了解Gson数据类型及其关系
第一:JsonElement(超级父类) 看JsonElement类的源码
- 抽象类
- 代表json串的某一个元素
- 某一个元素:
- JsonObject
- JsonArray
- JsonPrimitive(基本类型)
- JsonNull
第二:JsonElement的四个子类 看JsonElement类的源码
- JsonObject、JsonArray、JsonPrimitive、JsonNull
- JsonElement提供了一系列的方法来判断当前的JsonElement属于哪个子类
- isJsonArray()
- isJsonObject()
- isJsonPrimitive()
- isJsonNull()
- 同时,该类也提供了把当前JsonElement作为上述子类的一种返回的方法
- getAsJsonArray()
- getAsJsonObject()
- getAsJsonNull()
- getAsJsonPrimitive();
- 第三:JsonPrimitive 看JsonPrimitive类的源码
JsonElement的子类,该类对Java的基本类型及其对应的对象类进行了封装
Java的基本数据类型(短整长,单精双精,字符<表示为单字符字符串>,布尔)
- isBoolean()
- isNumber():包含短整长,单双精,字节
- isPrimitiveOrString():包含字符和字符串
- 第四:JsonArray,JsonPrimitive,JsonNull
很常见的json对象
第二阶段:Gson对象的产生
- Gson对象的产生
- 通过new Gson()方式
使用的都是默认的配置 - 通过JsonBuilder的方式
自定义一些配置选项,版本支持,输出,定制序列化、反序列化和构造器等。
- 建造者模式:设计者模式的一种,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
- 通过new Gson()方式
通过new Gson()方式产生
通过这种方式创建的Gson对象,将用Java的反射机制来完成json的解析
调用无参构造方法时,会默认调用有参构造方法,将大量默认的TypeAdapterFactory添加到factories中,生成默认的Gson对象通过GsonBuilder方式产生
通过这种方式产生的Gson对象,将使用自定义的TypeAdapter来完成json的解析
TypeAdapter:该类的作用就是把json串封装成你指定的Java对象- 通过GsonBuilder注册TypeAdapter,并把TypeAdapter封装成TypeAdpterFactory对象
- 将封装成的TypeAdapterFactory通过GsonBuilder的create传入Gson对象中并返回
- 调用gson.fromJson方法,调用getTypeAdapter方法返回你自定义的Adapter
判断Gson对象是那种方式产生的
通过遍历factories得到里面的TypeAdapterFactory
添加到factories(list)中的顺序为先添加自定义的TypeAdapterFactory,再添加系统自带的TypeAdapterFactory
只要得到一个不为空就返回,这样就可以得到自定义的TypeAdapterFactory。