json 的 key 必须是 String 类型,因此不能是 null。
json中的数字支持正/负数,还支持以 e 表示的方式
Gson 中 @SerializedName 表示的是转换为json 的时候的名字,和目前的本身的名字没什么关系。
1 |
|
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 源码解析这次就不看了,下次。