Json&Gson高级进阶系列2

Json&Gson高级进阶系列1

一.Json解析的两种方式

{
   
	"name":"ljh",
	"age":21
}
①一次性全部解析完(适用于元素较少):比如DOM解析

这个就一次性解析成"{" , ""name":"ljh"" , "," , ""age":21" , "}"。然后才使用
一次性加载到内存

②基于事件驱动的(适用于元素较多):比如SAX,PULL解析

与上面的相反,并不是一次性将Json对象全部解析完,而是一个一个地解析
比如解析到{的时候就能判断它是一个object
可以需要的时候才加载到内存,省内存但是效率较低。

二.Json词法分析——JsonToken类

如果要自己解析Json,首先要一个一个地把Json字符串分开,比如先分{,然后分",然后是属性名,然后是",等等,最后是}。而标志这些的,就是JsonTokenToken意为令牌
在这里插入图片描述
其对应关系如下
在这里插入图片描述

Json语法分析

在这里插入图片描述

三.JsonElement

这是一个抽象类,代表着json串的某一个元素,这个元素可以是一个Json(对应JsonElementJsonObject子类),可以是一个数组(对应JsonElementJsonArray子类),可以是一个Java的基本类型(对应JsonElementJsonPrimitive子类),可以是一个null(对应JsonElementJsonNull子类)
在这里插入图片描述
四个子类示意图

在这里插入图片描述

四.TypeAdapter

TypeAdapter的作用和基本使用在上一篇文章中已有详细介绍,在这里主要讲下源码
在这里插入图片描述
可以看到它是一个抽象类,有两个抽象方法,分别是writeread。除此之外,我们还看到了上一篇文章中提到的null处理方法nullSafe。这里让我们看一下它到底是怎么处理的

1.nullSafe方法

它返回一个TypeAdapter
在这里插入图片描述

我们可以看下write方法里面的nullValue方法

在这里插入图片描述

也可以看下read方法里面的nextNull方法

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
包含以下java源文件: com.google.gson.DefaultDateTypeAdapter.class com.google.gson.ExclusionStrategy.class com.google.gson.FieldAttributes.class com.google.gson.FieldNamingPolicy.class com.google.gson.FieldNamingStrategy.class com.google.gson.Gson.class com.google.gson.GsonBuilder.class com.google.gson.InstanceCreator.class com.google.gson.JsonArray.class com.google.gson.JsonDeserializationContext.class com.google.gson.JsonDeserializer.class com.google.gson.JsonElement.class com.google.gson.JsonIOException.class com.google.gson.JsonNull.class com.google.gson.JsonObject.class com.google.gson.JsonParseException.class com.google.gson.JsonParser.class com.google.gson.JsonPrimitive.class com.google.gson.JsonSerializationContext.class com.google.gson.JsonSerializer.class com.google.gson.JsonStreamParser.class com.google.gson.JsonSyntaxException.class com.google.gson.LongSerializationPolicy.class com.google.gson.TreeTypeAdapter.class com.google.gson.TypeAdapter.class com.google.gson.TypeAdapterFactory.class com.google.gson.annotations.Expose.class com.google.gson.annotations.SerializedName.class com.google.gson.annotations.Since.class com.google.gson.annotations.Until.class com.google.gson.internal.ConstructorConstructor.class com.google.gson.internal.Excluder.class com.google.gson.internal.JsonReaderInternalAccess.class com.google.gson.internal.LazilyParsedNumber.class com.google.gson.internal.LinkedTreeMap.class com.google.gson.internal.ObjectConstructor.class com.google.gson.internal.Primitives.class com.google.gson.internal.Streams.class com.google.gson.internal.UnsafeAllocator.class com.google.gson.internal.bind.ArrayTypeAdapter.class com.google.gson.internal.bind.CollectionTypeAdapterFactory.class com.google.gson.internal.bind.DateTypeAdapter.class com.google.gson.internal.bind.JsonTreeReader.class com.google.gson.internal.bind.JsonTreeWriter.class com.google.gson.internal.bind.MapTypeAdapterFactory.class com.google.gson.internal.bind.ObjectTypeAdapter.class com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.class com.google.gson.internal.bind.SqlDateTypeAdapter.class com.google.gson.internal.bind.TimeTypeAdapter.class com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.class com.google.gson.internal.bind.TypeAdapters.class com.google.gson.reflect.TypeToken.class com.google.gson.stream.JsonReader.class com.google.gson.stream.JsonScope.class com.google.gson.stream.JsonToken.class com.google.gson.stream.JsonWriter.class com.google.gson.stream.MalformedJsonException.class

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值