0%

Java筑基-:(16)2021.8.27Java基础进阶-Json解析

json 的 key 必须是 String 类型,因此不能是 null。

json中的数字支持正/负数,还支持以 e 表示的方式

Gson 中 @SerializedName 表示的是转换为json 的时候的名字,和目前的本身的名字没什么关系。

1
2
@SerializedName("sex")
public String a;

Gson 普通使用一般都是使用反射去做,不能自定义序列化过程,我们可以设置 JsonAdapter ,自己控制序列化过程。GsonBuilder 去设置:

1
Gson gson = new GsonBuilder().xxxxx.create();

使用 Gson 解析字符串的时候,碰到类似:

expected BEGIN_ARRAY but was STRING

之类的错误,可以通过自定义 TypeAdapter 或者 JsonDeserializer 的方式去解决。这里面注意,在使用 GsonBuilder 构建的时候,可以关注 serializeNulls

Gson 是基于事件驱动的解析方式,它可以不要求一次性将数据全部加入内存。它的工作流程是:

  • 假如解析加载的数据碰到 “{“ ,那就说明碰到 jsonObject 了,则现将 “{“ 入栈,然后等待后续的 “}” 的时候再一起出栈组这个 jsonObject

  • 其他的诸如碰到 “[“ 也是一样的,都是先压栈,等配套的符号来了之后再一起出栈

JsonElement 有 4 种实现类,分别是:

  • JsonNull

  • JsonObject

  • JsonArray

  • JsonPrimitive:Json基本类型,比如 String 、int、number等

Gson 源码解析这次就不看了,下次。

谢谢你的鼓励