当前位置: 首页 > 面试题库 >

是否可以使用Gson.fromJson()获得ArrayList>?

慕震博
2023-03-14
问题内容

假设我有一个json数组数组

String jsonString = [["John","25"],["Peter","37"]];

我想将其解析ArrayList<ArrayList<String>>对象。当我用

Gson.fromJson(jsonString,ArrayList<ArrayList<String>>.class)

它似乎不起作用,我通过使用进行了工作

Gson.fromJson(jsonString,String[][].class)

有一个更好的方法吗?


问题答案:

是的,请使用TypeToken

ArrayList<ArrayList<String>> list = gson.fromJson(jsonString, new TypeToken<ArrayList<ArrayList<String>>>() {}.getType());

TypeToken允许你指定你真正想要的泛型类型,这有助于GSON找到类型来使用反序列化过程。

它使用这种宝石:Class#getGenericSuperClass()。它是匿名类的事实使它成为的子类TypeToken<...>。相当于一个类

class Anonymous extends TypeToken<...>

该方法的规范指出

如果超类是参数化类型,则Type返回的对象必须准确反映源代码中使用的实际类型参数。

如果指定

new TypeToken<String>(){}.getType();

Type返回的对象实际上是一个ParameterizedType,您可以使用来检索实际的类型参数ParameterizedType#getActualTypeArguments()

在上面的示例中,类型实参将是Type对象java.lang.String。在您的示例中,它将是的对应Type对象ArrayList<ArrayList<String>>。Gson会一直走下去,直到建立了所需类型的完整地图。



 类似资料:
  • 假设我有一个< code>json数组数组 我想将其分解为<code>ArrayList

  • 我发现了这个,但老实说不确定如何安装它或它是否适用。谢谢!

  • 问题内容: 我想使用Streams.intRange(int start,int end,int step)实现反向排序的流。但是,似乎java.util.Streams类不再可用(但是它仍在标准库的rt.jar中)。此方法是在其他类中还是被其他方法替代? 问题答案: 实际上,JDK中再也没有这种方法了。您能获得的下一个最接近的位置是,但是只会一步一步走。 一种解决方案是实施您自己的解决方案。例如

  • AccessibilityService在系统的内存管理方面与普通服务有何不同? 我想问的是:系统可以为了节省内存而关闭AccessibilityService吗?如果可以,当您进入AccessibilityService时,您会看到它打开还是关闭?用户是否必须再次手动打开? 使用startForeground是否有助于使AccessibilityService保持活动状态? 在一个类似的问题中,

  • 我正在学习谷歌在udacity制作的android课程中的例子,我用另一个例子替换了这个例子的url,但是我只能看到,使用日志只能看到我正在下载的url的一小部分。 您可以下载的数据量有限制吗? 我在日志中的回复: V/FetchWeatherTask︰预测JSON字符串:{"cod":"200","消息": 0.0506,"城市":{"id": 0,"name":"Mountain View",

  • 问题内容: 此问题与跨域资源共享(CORS)有关。 如果在发出CORS请求时出现错误,Chrome(以及AFAIK其他浏览器)会将错误记录到错误控制台。消息示例可能如下所示: XMLHttpRequest无法加载。原产地不被访问控制允许来源允许的。 我想知道是否有办法以编程方式获取此错误消息?我尝试将调用包装在try/catch中,也尝试添加事件处理程序。两者均未收到错误消息。 问题答案: 看到: