json解析原理

来源:互联网 发布:作品集网站 知乎 编辑:程序博客网 时间:2024/05/01 01:57

json解析原理之Gson

目标:了解json对象解析的大概过程


alt text

在这个序列化和反序列化的过程中,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的方式
       自定义一些配置选项,版本支持,输出,定制序列化、反序列化和构造器等。
      • 建造者模式:设计者模式的一种,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

alt text

  • 通过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。


第三阶段:通过反射将json对象转化成java对象

alt text

0 0
原创粉丝点击