有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java是可以使用Gson的。fromJson()获取ArrayList<ArrayList<String>?

假设我有一个json数组

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

我想把它分成ArrayList<ArrayList<String>>个对象。当我使用

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

它似乎不起作用,我用

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

有更好的方法吗


共 (1) 个答案

  1. # 1 楼答案

    是的,使用^{}

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

    TypeToken允许您指定实际需要的泛型类型,这有助于Gson在反序列化期间找到要使用的类型

    它使用这个gem:^{}。由于它是一个匿名类,所以它是TypeToken<...>的子类。这相当于一门课

    class Anonymous extends TypeToken<...>
    

    该方法的规范规定:

    If the superclass is a parameterized type, the Type object returned must accurately reflect the actual type parameters used in the source code.

    如果你指定

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

    返回的Type对象实际上是一个ParameterizedType,您可以在其上使用^{}检索实际的类型参数

    类型参数将是上述示例中java.lang.StringType对象。在您的示例中,它将是ArrayList<ArrayList<String>>对应的Type对象。Gson将继续沿着这条链往下走,直到它构建出所需类型的完整地图