首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么使用Gson反序列化到另一个类后会生成LinkedTreeMap?

Gson是Google提供的一个Java库,用于将Java对象序列化为JSON格式,或将JSON格式反序列化为Java对象。在使用Gson进行反序列化时,当目标类的结构与JSON数据的结构不完全匹配时,Gson会将JSON数据反序列化为LinkedTreeMap对象。

LinkedTreeMap是Gson库中定义的一个特殊类型,它是java.util.Map接口的实现类。LinkedTreeMap内部使用红黑树实现,可以保持键值对的插入顺序,并具有快速的查找性能。

当Gson进行反序列化时,如果目标类的结构与JSON数据的结构不完全匹配,即目标类中存在一些字段,而JSON数据中没有对应的字段时,Gson会将这些缺失的字段值存储在LinkedTreeMap对象中。这样做的好处是,即使数据结构不完全匹配,Gson仍然能够成功地将JSON数据反序列化为Java对象,并且不会导致异常抛出。

然而,由于LinkedTreeMap是Gson库内部使用的实现类,并不是我们期望的目标类类型。因此,当我们使用Gson进行反序列化时,需要进一步将LinkedTreeMap对象转换为目标类类型,以便我们能够方便地使用这些数据。

总结来说,当使用Gson进行反序列化时,如果目标类的结构与JSON数据的结构不完全匹配,Gson会使用LinkedTreeMap对象暂存缺失的字段值,以确保反序列化的成功。我们可以通过进一步处理,将LinkedTreeMap对象转换为目标类类型,以便我们能够方便地操作这些数据。

腾讯云提供了一系列云计算相关的产品,其中包括存储、数据库、人工智能等。如果想要了解更多关于腾讯云的产品信息,可以访问腾讯云官方网站:https://cloud.tencent.com/ 。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

除了FastJson,你还有选择: Gson简易指南

使用方面,Gson 提供简易的API fromJson/toJson 来实现 Java 与 JSON 之间的转换,并且能生成紧凑,可读的 JSON 字符串输出,还支持复杂对象转换和丰富的自定义表示,足以满足在日常开发中我们绝大部分的...Gson 基本使用 使用 Gson 框架进行序列化与反序列操作,都离不开 com.google.gson.Gson 对象,它也是 Gson 框架的关键对象,提供的公共 API 具备了多种序列化和反序列方式...JosnObject 生成 JSON 除了上述将自定义的对象转换成 JSON 的方式之外,还可以使用 Gson 框架提供的 JsonObject 构建普通对象,然后使用 toJson 方法生成 JSON...自定义集合LinkedTreeMap ,它实现Map 接口了,存储键值对,在新增和删除上实现上进行了优化,并且将存储键值对的顺序作为遍历顺序,也就是先存入的先被遍历。...Result 使用就可以看到效果。

1.3K30

有意思,发现Kotlin一个神奇的bug!

里面的TypeToken,从而实现任意类型的反序列化,如下: //1、反序列化User对象 val user: User?...}]", type) 以上写法,是Java的语法翻译过来的,它有一个缺点,那就是泛型的传递必须要通过另一个去实现,上面我们借助TypeToken,相信这一点,很多人都不能接受,于是乎,在Kotlin...在收到的泛型不明确时,便会自动将json对象反序列化LinkedTreeMap对象。...extends User>>,这,估计大伙都明白了,显然第一次反序列化过程泛型被擦除了,所以导致了反序列化失败。...至于为什么依赖本module的方法,遇到泛型T与具体相结合时,泛型T会被擦除问题,这个就需要Kotlin官网来解答了,有知道原因的小伙伴,可以在评论区留言。

92320
  • 除了FastJson,你还有选择: Gson简易指南

    [006y8mN6gy1g6s3u2bfxxj30oa0ewwfn.jpg] Gson 基本使用 使用 Gson 框架进行序列化与反序列操作,都离不开 com.google.gson.Gson 对象,它也是...JosnObject 生成 JSON 除了上述将自定义的对象转换成 JSON 的方式之外,还可以使用 Gson 框架提供的 JsonObject 构建普通对象,然后使用 toJson 方法生成 JSON...自定义集合LinkedTreeMap ,它实现Map 接口来存储键值对,在新增和删除上实现上进行了优化,并且将存储键值对的顺序作为遍历顺序,也就是先存入的先被遍历。...@Since 该注解用于标记对应字段或者类型的版本,让 Gson 可以指定版本号进行序列化和反序列化操作。当Web服务上的 JSON 数据对应的存在多个版本的字段时,这个注解就十分有用。...Result 使用就可以看到效果。

    1.6K40

    Gson 的一个著名Bug说起

    Number类型盲转Double Gson是一个源自谷歌的JSON序列化/反序列化框架,出身名门,社区活跃,因此被广泛应用。 ? 不过在项目中使用下来,发现Gson有一个比较坑的问题。...也就是 明明是整形的数字,经过Gson转换之后,就变成了Double类型。 此处假装有一个案例 问题产生的原因 对于Map以及各种Bean进行序列化和反序列化时,如果某个字段就会发生此类问题。...所以默认情况下是由ObjectTypeAdapter完成此类数据的解析。来看一下ObjectTypeAdapter中是如何处理的?...; import com.google.gson.TypeAdapterFactory; import com.google.gson.internal.LinkedTreeMap; import com.google.gson.internal.bind.ObjectTypeAdapter...当然,在使用Gson时,需要先注册这个自定义的类型解析器。

    1.9K30

    Gson:我爸是 Google

    2)可以序列化 140 万个对象的集合。 3)可以反序列化包含 87000 个对象的集合。 4)将字节数组和集合的反序列化限制从 80K 提高 11M 以上。...1)推荐使用 private 修饰字段。 2)不需要使用任何的注解来表明哪些字段需要序列化,哪些字段不需要序列化。默认情况下,包括所有的字段,以及从父继承过来的字段。...String name = "图灵"; } 假如你 debug 的时候,进入 toJson() 方法的内部,就可以观察。...cannot be cast to class com.itwanger.gson.Bar (com.google.gson.internal.LinkedTreeMap and com.itwanger.gson.Bar...也许,你在序列化和反序列化的时候想要筛选一些字段,我也考虑这种需求了,特意为你准备了几种方案,你可以根据自己的口味挑选适合你的。 第一种,通过 Java 修饰符。

    92320

    人生苦短,我用Gson

    的强悍之处,普通的序列化和反序列时必须要求所对应的中属性必须含有setter和getter方法,Gson完全不需要。...:18} 2、暴露序列化注解@Expose 使用此注解时就可以选择性的序列化的属性,前面介绍的方法都是直接使用new Gson(),toJson()和fromJson()方法,这会将全部的字段序列化或反序列化...高阶用法 1、泛型序列化 fromJson时使用TypeToken格式 public static void main(String[] args) { Gson gson = new...会定位内置的ObjectTypeAdaptor,我们来分析一下该类的逻辑过程。...另外一点可以看出当类型为BEGIN_OBJECT时ObjectTypeAdapter返回的Gson自定义的map类型LinkedTreeMap,如果使用时用到强转为HashMap会报错,由于我们使用的都是

    2.2K50

    如何利用 Flink CDC 实现数据增量备份 Clickhouse

    它是Change Data Capture的缩写,即变更数据捕捉的简称,使用CDC我们可以从数据库中获取已提交的更改并将这些更改发送到下游,供下游使用。...数据压缩 一些面向列的 DBMS(InfiniDB CE 和 MonetDB)不使用数据压缩。但是,数据压缩确实提高了性能。...// 添加 sink .addSink(new ClickhouseSink()); 这里用到的JsonDebeziumDeserializationSchema,是我们自定义的一个序列化...,用于将Debezium输出的数据,序列化 // 将cdc数据反序列化 public static class JsonDebeziumDeserializationSchema implements...; import com.google.gson.internal.LinkedTreeMap; import io.debezium.data.Envelope; import org.apache.flink.api.common.typeinfo.BasicTypeInfo

    4.4K70

    Gson 系列文章

    JSON 数据,我们先要创建相映匹配的 Java ,推荐使用 IDEA 插件 [ GsonFormat ] 快速生成对应的JavaBean。...alternate 属性是用在反序列化上的,也就是说从 JSON Java 的过程。Gson 会帮我们匹配 JSON 中的命名,并尝试找到一个字段映射。...添加 @Expose 注解是一个非常简单的控制哪些要被(序列化的方式。我们建议如果需要所有的都被转化,就不用添加 @Expose 注解了,不然只会搞乱你的模型。..., isDeveloper=true, age=18, day=SUNDAY) 自定义枚举()序列化 使用 @SerializedName 注解给每个变量赋予另一个字段名: public enum Day2...Advanced — 通过 @JsonAdapter 自定义()序列化 之前我们介绍了如何使用 Gson 来自定义()序列化和自定义实例创建。

    15.6K10

    穿越到东汉末年的Jackson

    Gson: 吾观取汉上之地,易如掌。我主刘豫州躬行仁义,不忍夺同宗之基业,故力辞之。刘琮孺子,听信佞言,暗自投降,致使曹操得以猖獗。...东吴FastJson fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化JavaBean。...android虚拟机:反射的方式 gson:反射+反射缓存、支持部分stream、内存性能较差(gc问题) ASM ASM是一个 Java 字节码操控框架。它能被用来动态生成或者增强既有的功能。...ASM 可以直接产生二进制 class 文件,也可以在被加载入 Java 虚拟机之前动态改变行为。 ASM能够通过改造既有,直接生成需要的代码。...增强的代码是硬编码在新生成文件内部的,没有反射带来性能上的付出。 ASM可以用来实现AOP。 反射性能 反射性能相对于对象直接访问性能相差两个数量级(百倍)。

    2K20

    还在被数据序列化折磨?是时候丢弃 Gson

    它作为一套专门为 Kotlin 的开发的序列化框架,自然要兼顾到 Kotlin 的类型的各种特性,你会发现用 Gson序列化 Kotlin 时遇到的奇怪的问题在这里都没了。...不同的是,我们这回用 Gson 去反序列化同样的字符串,结果呢? ? 为什么会这样?...尽管我们在 Data 的构造器里面给出了默认值,但 Gson 听了之后会说:啥玩意?啥默认值? ?...其实猜结果的时候,我们能想到的差异就是,KS 能够正常的执行 Data 的初始化流程,因此可以覆盖默认值、初始化值等等,而 Gson 不能,所以 Gson 一定不会处理 d。...用 Gson 解析之后,如果我们想要访问 d,直接抛出空指针。这是为什么呢?

    2.4K10

    经过性能对比,我发现温少的FastJson真牛。

    这4个JSON库分别为: Gson, FastJson, Jackson, Json-lib。 # 简单介绍 选择一个合适的JSON库要从多个方面进行考虑。...里面只要有 get和 set方法, Gson完全可以实现复杂类型的 json bean或 bean json的转换,是 JSON解析的神器。...Jackson 内部实现正是通过高性能的流模式 API 的 JsonGenerator 和 JsonParser 来生成和解析 json。...为什么 Jackson的介绍这么长啊?因为它也是本人的最爱。...json-lib最开始的也是应用最广泛的 json解析工具, json-lib 不好的地方确实是依赖于很多第三方包,对于复杂类型的转换, json-lib对于 json转换成 bean还有缺陷, 比如一个里面会出现另一个

    6.7K50

    Java序列化引发的血案

    强烈推荐每个序列化都手动指定其 serialVersionUID ,如果不手动指定,那么编译器会动态生成默认的序列化号,因为这个默认的序列化号和的特征以及编译器的实现都有关系,很容易在反序列化时抛出...如果一个文件序列化文件后,的结构发生了改变,是否能被正确的反序列化? 这个答案是不确定的。...不过相较于JDK的序列化,Hessian另一个优势在于,这是一个跨语言的序列化方式,这意味着序列化后的数据可以被其他语言使用,兼容性更好。 基础使用 引入pom依赖 <!...Kryo 的拷贝是对象对象的拷贝而不是对象字节,再从字节对象的恢复。Kryo 为了保证序列化的高效率,会提前加载需要的,这会带一些消耗,但是这是序列化后文件较小且反序列化非常快的重要原因。...1、GSON Gson提供了fromJson() 和toJson() 两个直接用于解析和生成的方法,前者实现反序列化,后者实现了序列化;同时每个方法都提供了重载方法。

    43320

    SpringBoot的序列化和反序列化

    序列化与反序列化 1、认识序列化与反序列化 Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程。 2、为什么要实现对象的序列化和反序列化?...serialVersionUID的生成方法: (1)private static final long serialVersionUID = 1L; (2)根据包名,名,继承关系,非私有的方法和属性,...Class自动生成一个serialVersionUID作序列化版本比较用,这种情况下,如果Class文件(名,方法明等)没有发生变化(增加空格,换行,增加注释等等),就算再编译多次,serialVersionUID...); System.out.println(numList.get(0)); } 这是因为在反序列化的过程中,Gson会根据待解析的类型定位具体的TypeAdaptor,并通过该类的...read方法组装成最后的对象,由于Map对应的是Object,这里的Gson最终定位内置的ObjectTypeAdaptor,该类的关键代码如下:我们可以看到,数值类型(NUMBER)全部被转换成了

    2.4K40
    领券