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

如何用GSON反序列化不同类型的数组?

GSON是Google提供的一个Java库,用于将Java对象转换为JSON格式的字符串,以及将JSON格式的字符串转换为Java对象。在反序列化不同类型的数组时,可以使用GSON提供的TypeToken类来指定数组的类型。

下面是使用GSON反序列化不同类型的数组的步骤:

  1. 导入GSON库:首先需要在项目中导入GSON库的依赖。可以在项目的构建文件(如pom.xml或build.gradle)中添加相应的依赖项。
  2. 创建GSON对象:使用GSON类的构造函数创建一个GSON对象,用于进行序列化和反序列化操作。
代码语言:txt
复制
Gson gson = new Gson();
  1. 定义数组类型:根据需要反序列化的数组类型,可以使用TypeToken类来定义一个Type对象。
代码语言:txt
复制
Type arrayType = new TypeToken<YourArrayType>(){}.getType();

其中,YourArrayType是你要反序列化的数组类型,可以是任何合法的Java数组类型,如String[]、int[]、List<String>等。

  1. 反序列化数组:使用GSON对象的fromJson()方法将JSON字符串反序列化为指定类型的数组。
代码语言:txt
复制
YourArrayType[] array = gson.fromJson(jsonString, arrayType);

其中,jsonString是包含数组数据的JSON格式字符串。

通过以上步骤,你可以使用GSON库来反序列化不同类型的数组。需要注意的是,GSON库对于数组中的元素类型要求一致,即数组中的元素类型应与目标类型一致或可自动转换。

以下是一个示例,演示如何使用GSON反序列化不同类型的数组:

代码语言:txt
复制
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

public class Main {
    public static void main(String[] args) {
        String jsonString = "[1, 2, 3, 4, 5]";

        // 反序列化为整型数组
        Type intArrayType = new TypeToken<int[]>(){}.getType();
        int[] intArray = new Gson().fromJson(jsonString, intArrayType);
        System.out.println("整型数组:" + Arrays.toString(intArray));

        jsonString = "[\"apple\", \"banana\", \"orange\"]";

        // 反序列化为字符串数组
        Type stringArrayType = new TypeToken<String[]>(){}.getType();
        String[] stringArray = new Gson().fromJson(jsonString, stringArrayType);
        System.out.println("字符串数组:" + Arrays.toString(stringArray));
    }
}

输出结果:

代码语言:txt
复制
整型数组:[1, 2, 3, 4, 5]
字符串数组:[apple, banana, orange]

在以上示例中,我们分别将包含整型和字符串的JSON数组反序列化为对应的Java数组。

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

相关·内容

Gson 系列文章

在 Java 中两者实现方式不同,使用哪一种数据类型取决于你实际需求,但是在序列化这个问题上,Gson 并不关心这两种数据结构具体实现。...在 JSON 数据格式中,不存在数组等结构,只是 Java 具体实现使得这两种数据类型有很大不同。但是在上层它们表示出相同结构。...Array 首先看解析成数组,通过 Gson gson.fromJson 方法,我们很简单GSON 解析成数组,注意这里传递参数是 Founder[].class 而不是Founder.class...实际开发中,我们更多是转成一个 ArrayList,但是,我们不能像解析数组那样传入 List,为了让Gson知道我们要解析数据类型,我们必须传递给它一个Type,内部根据 TypeToken 来区分要解析类型...Advanced — 通过 @JsonAdapter 自定义()序列化 之前我们介绍了如何使用 Gson 来自定义()序列化和自定义实例创建。

15.3K10

委托示例(利用委托对不同类型对象数组排序)

System.Collections.Generic; using System.Text; namespace delegateTest {     ///      /// 演示利用委托给不同类型对象排序...object类型参数)         static void Main(string[] args)         {             Employee[] employees =...CompareOp(Employee.CompareEmploySalary);             BubbleSorter.Sort(employees, c1);//对employees数组...                    {                         if (gtMethod(sortArray[j], sortArray[i])) //比较大小,注:不同...object,比较大小方法不同,比如Employee是按工资高低来比较,int是按数字大小来比较,利用委托好处就在于不用管具体用哪种方法,具体调用时候才确定用哪种方法

1.7K90

Gson 简单使用姿势小结

,并不会涉及到不同 json 框架性能对比 本文主要内容来源于官方教程: https://github.com/google/gson/blob/master/UserGuide.md 1....基本序列化与反序列化 一般来讲,我们通过 Gson 对象来实现 Json 序列化与反序列化,如下是几个简单序列化与反序列化 case // Serialization Gson gson = new...对象序列化 对象序列化与反序列化可以说是最常见,在 Gson 使用过程中,推荐对象写法 filed:private 修饰 不希望序列化成员,添加transient修饰符 默认无参构造方法(可选...JsonParser.parseString方法,输入参数可以是 String 也可以是流,返回是JsonElement对象,这个对象比较有意思,提供了一些基础类型输出方法 getAsString...":"newer","newField":"new","field":"old"} 自定义类型转换 GsonBuilder gson = new GsonBuilder(); gson.registerTypeAdapter

74720

【Netty】「项目实战」(三)序列化算法选型对聊天室可扩展性影响

Netty 可以通过集成第三方库( Jackson、Gson)来实现对象到 JSON 字符串序列化和反序列化。...---- 需要注意以下几点: 序列化和反序列化方法都使用了泛型 ,使得这两个方法可以用于不同类型对象。...反序列化过程中,如果传入字节数组无法正确反序列化为指定类型对象,会抛出 ClassNotFoundException 异常。...缓存机制:通过使用 schemaCache 对象对不同 Schema 进行缓存,可以避免重复创建 Schema 对象开销,并提高序列化和反序列化性能。...但是需要注意,如果系统中存在大量不同类型对象,可能会导致 schemaCache 大小增长过大,占用较多内存。在此情况下,可以考虑使用 LRU 缓存策略或限制缓存最大容量。

23231

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

Java 序列化 简单对象序列化 我们可以通过下面的例子来看下通过上述两种方式序列化 Java 对象不同效果: public class ResultTest { @Test void...指定数组类型转换为对应类型数组。...方式与处理 Array 数据一样;而将JSON 数据转为 List 对象操作略有不同,要将一个 JSON 数组数据转则换为一个自定义类List 时,我们按照原来写法如下: @Test public...Result, 然后在 fromJson 方法中传入就会根据对应类型执行反序列化操作。...@Since 该注解用于标记对应字段或者类型版本,让 Gson 可以指定版本号进行序列化和反序列化操作。当Web服务上 JSON 数据对应实体类存在多个版本字段时,这个注解就十分有用。

1.3K30

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

Java 序列化 简单对象序列化 我们可以通过下面的例子来看下通过上述两种方式序列化 Java 对象不同效果: public class ResultTest { @Test void...指定数组类型转换为对应类型数组。...方式与处理 Array 数据一样;这里主要讲的是将JSON 数据转为 List 对象操作略有不同,要将一个 JSON 数组数据转换为一个自定义类List 时,我们按照原来写法如下: @Test...Result\ , 然后在 fromJson 方法中传入就会根据对应类型执行反序列化操作。...@Since 该注解用于标记对应字段或者类型版本,让 Gson 可以指定版本号进行序列化和反序列化操作。当Web服务上 JSON 数据对应类存在多个版本字段时,这个注解就十分有用。

1.6K40

Gson 一个著名Bug说起

Number类型盲转Double Gson是一个源自谷歌JSON序列化/反序列化框架,出身名门,社区活跃,因此被广泛应用。 ? 不过在项目中使用下来,发现Gson有一个比较坑问题。...也就是 明明是整形数字,经过Gson转换之后,就变成了Double类型。 此处假装有一个案例 问题产生原因 对于Map以及各种Bean进行序列化和反序列化时,如果某个字段就会发生此类问题。...在对Object类型提供了自定义类型解析器之后,顺手再给自定义Bean做一个类型解析器,保证数据在序列化和反序列化时可以正确解析。...具体类型由运行时在切面中动态确定。能不能正确地将这个Bean序列化和反序列化是整个录制/回放方案基础。为此,可以专门为此来编写一个类型转换器MockRecordTypeAdaptor 。...在Mybatis中返回Map中含有数值类型时,类型为BigDecimal 。返回记录条数和总和。

1.8K30

Gson:我爸是 Google

2)可以序列化 140 万个对象集合。 3)可以反序列化包含 87000 个对象集合。 4)将字节数组和集合序列化限制从 80K 提高到 11M 以上。...,你可以将基本数据类型 int、字符串类型 String、包装器类型 Integer、int 数组等等作为参数,传递给 toJson() 方法,该方法将会返回一个 JSON 形式字符串。...不过,你需要在反序列化时候,指定参数类型,是 int 还是 Integer,是 Boolean 还是 String,或者 String 数组。...5)JSON 中缺少字段将在反序列化后设置为默认值,引用数据类型默认值为 null,数字类型默认值为 0,布尔值默认为 false。 接下来,来看一个序列化集合例子。...、立体化,字段与值之间有空格,每个不同字段之间也会有换行。

90620

终于放弃了fastjson,迁移至Gson

框架,Gson和Jackson,漏洞数量少很多,高危漏洞也比较少,这是公司想要替换框架主要原因。...Gson 提供一种机制,使得将Java对象转换为JSON或相反使用toString()以及构造器(工厂方法)一样简单。 允许预先存在不可变对象转换为JSON或与之相反。...看看空数组呢,毕竟[]感觉比{}更加容易出错。...Date序列化方式不同 不知道大家想过一个问题没有,如果你项目里有缓存系统,使用fastjson写入缓存,在你切换Gson后,需要用Gson解析出来。...所以就一定要保证两个框架解析逻辑是相同,但是,显然这个愿望是美好。 在测试过程中,发现了Date类型,在两个框架里解析是不同方式。

1.3K20

采用Gson解析含有多种JsonObject复杂json

这句话说 Gson 可以处理任意 Java 对象。那么对于上面讲那种反序列化情况来讲, Gson 应该也能做到。...通过研究 Gson 文档,发现可以通过自定义JsonDeserializer方式来实现解析这种 jsonObject 类型不同情况。...当序列化或者反序列化目标类时候就会调用我们注册typeAdapter, 这样就实现了人工干预 Gson 序列化和反序列化过程。...Ⅱ.JsonArray 这个类在 Gson 中代表一个数组类型,一个数组就是JsonElement集合,这个集合中每一个类型都可能不同。这是一个有序集合,意味着元素添加顺序是被维持着。...5 结语 对于如何优雅解析这种类型不同 JsonObject ,刚开始我是缺少思路,在网上也没有查到合适文档。但是通过查看 Gson 文档和源码,通过自己理解和分析,逐步完成了这个过程。

2.3K20

如何更好使用Gson

gson是Google开源一个Java序列化库,它具有以下特点: 使用简单,只需要掌握toJson()和fromJson()两个方法就可以实现Java对象和JSON字符串之间序列化和反序列化 允许将现有的不可修改对象与...此时前端就会展示为「用户没有姓名信息」,如果我把name设置成空字符串,那么序列化结果就会不同。...结果 错误信息写很清楚,我们isVip字段是一个Boolean类型,但是json中却是数字类型gson没办法识别了。 这时我们可以让node服务来修改,也可以选择自己做适配。...扩展一点 细心同学一定注意到了JsonToken这个类了,这是gson中对于Json符号类型定义。...讨论 最后留一个问题大家可以和我一起讨论,我们在做反序列化时还遇到了BT字符串null,它本身所属字段是Map类型,这样Adapter应该怎么写呢?

1.1K20

除了闹过腥风血雨fastjosn,你还知道哪些Java解析JSON利器?

02、Gson Gson 是谷歌提供一个开源库,可以将 Java 对象序列化为 JSON 字符串,同样可以将 JSON 字符串反序列化(解析)为匹配 Java 对象。...(json, collectionType); 我们需要借助 com.google.gson.reflect.TypeToken 和 java.lang.reflect.Type 来获取集合类型,再将其作为参数传递给...Gson 虽然可以将任意 Java 对象转成 JSON 字符串,但将字符串解析为指定集合类型时就需要花点心思了,因为涉及到了泛型——TypeToken 是解决这个问题银弹。...Java 对象序列化为 JSON,并将 JSON 存储成不同格式。...getJSONArray() 方法可以返回一个表示数组org.json.JSONArray 对象,再通过循环方式可以获取数组元素,代码示例如下所示。

1.3K20

大型项目废弃fastjson迁移至Gson保姆级攻略

框架,Gson和Jackson,漏洞数量少很多,高危漏洞也比较少,这是公司想要替换框架主要原因。...Gson 提供一种机制,使得将Java对象转换为JSON或相反使用toString()以及构造器(工厂方法)一样简单。允许预先存在不可变对象转换为JSON或与之相反。...看看空数组呢,毕竟[]感觉比{}更加容易出错。...Date序列化方式不同 不知道大家想过一个问题没有,如果你项目里有缓存系统,使用fastjson写入缓存,在你切换Gson后,需要用Gson解析出来。...所以就一定要保证两个框架解析逻辑是相同,但是,显然这个愿望是美好。 在测试过程中,发现了Date类型,在两个框架里解析是不同方式。

1.7K40

Java中JSON序列化和反序列化

JSON 标准 这是最简单标准规范之一: 只有两种结构:对象内键值对集合结构和数组,对象用 {} 表示、内部是 "key":"value",数组用 [] 表示,不同值用逗号分开 基本数值有 7 个:...平台无关性,因为类型和结构都是平台无关,而且好处理,容易实现不同语言处理类库,可以作为多个不同异构系统之间数据传输格式协议,特别是在 HTTP/REST 下数据格式。...缺点: 性能一般,文本表示数据一般来说比二进制大得多,在数据传输上和解析处理上都要更影响性能。 缺乏 schema,跟同是文本数据格式 XML 比,在类型严格性和丰富性上要差很多。...null 值,考虑从 JSON 中去掉该属性,除非它存在有很强语义原因 序列化枚举类型时,使用 name 而不是 value 日期要用标准格式处理 设计好通用分页参数 设计好异常处理 JSON...:ObjectSerializer 子类型处理:SeeAlso JSONType.alphabetic 属性: fastjson 缺省时会使用字母序序列化,如果你是希望按照 java fields/getters

2.2K40

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

它作为一套专门为 Kotlin 类开发序列化框架,自然要兼顾到 Kotlin 类型各种特性,你会发现用 Gson序列化 Kotlin 类时遇到奇怪问题在这里都没了。...来个嵌套类型 像数值类型、字符串这样基本类型通常与 JSON 类型都可以对应上,但如果是 JSON 中不存在一个类型呢?...//省略 toString() } 我们希望下面的代码序列化结果按照数组形式输出 MyDate 当中参数: MyDate(2000, 3, 1, 10, 24, 0) 这个对象序列化之后应该输出...MyDate 对象时按数组形式输出,而 load 方法则用于反序列化。...不同是,我们这回用 Gson 去反序列化同样字符串,结果呢? ? 为什么会这样?

2.3K10

如何更好使用Gson

gson是Google开源一个Java序列化库,它具有以下特点: 使用简单,只需要掌握toJson()和fromJson()两个方法就可以实现Java对象和JSON字符串之间序列化和反序列化 允许将现有的不可修改对象与...此时前端就会展示为「用户没有姓名信息」,如果我把name设置成空字符串,那么序列化结果就会不同。...@gmail.com", "isVip":1 } 那么我们在反序列化时就会报错 [报错信息] 错误信息写很清楚,我们isVip字段是一个Boolean类型,但是json中却是数字类型gson...扩展一点 细心同学一定注意到了JsonToken这个类了,这是gson中对于Json符号类型定义。...讨论 最后留一个问题大家可以和我一起讨论,我们在做反序列化时还遇到了BT字符串null,它本身所属字段是Map类型,这样Adapter应该怎么写呢?

1.5K00

Gson基本使用

也就是说和 2 里面介绍方法一样 4. Array 和 List 序列化/反序列化 序列化 序列化和前面介绍方法是一样序列化 那就有些不同了,不然也不用分开写。...1 Array序列化 先假设有一个name数组,定义JSON格式如下: String namesJson = "['xiaoqiang','chenrenxiang','hahaha']"; 1...可以看到,Gson序列化都是调用 Gson.fromJson(...)方法,传入JSON字符串,以及这段JSON字符串对应Object类型。...反序列化后结果如下: 那么,如果一个Java Object里包含List类型变量,该如何反序列化这个Object呢?答案是,和 2 一样就行了,无需为其内部List提供Type。 5...., User.class); 123 对于JSON字符串里没有的变量,Gson在反序列化时会给它一个默认值,int类型默认为0,bool类型默认为false,String类型默认为null。

52810
领券