有 Java 编程相关的问题?

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

java如果列表包含不同的类,如何使用gson将json转换为arraylist?

我想将arraylist存储到磁盘,所以我使用gson将其转换为字符串

    ArrayList<Animal> anim=new ArrayList<Animal>();
    Cat c=new Cat();
    Dog d=new Dog();
    c.parentName="I am animal C";
    c.subNameC="I am cat";
    d.parentName="I am animal D";
    d.subNameD="I am dog";
    anim.add(c);
    anim.add(d);
    Gson gson=new Gson();
    String json=gson.toJson(anim);



public class Animal {

    public String parentName;
}

public class Cat extends Animal{
    public String subNameC;
}

public class Dog  extends Animal{
    public String subNameD;
}

输出字符串:

[{"subNameC":"I am cat","parentName":"I am animal C"},{"subNameD":"I am dog","parentName":"I am animal D"}]

现在我想用这个字符串转换回arraylist

我知道我应该使用类似于:

    ArrayList<Animal> anim = gson.fromJson(json, ArrayList<Animal>.class);

但这是不正确的,正确的语法是什么


共 (2) 个答案

  1. # 1 楼答案

    您可以使用下面的代码将json转换为相应的对象列表

    TypeToken<List<Animal>> token = new TypeToken<List<Animal>>() {};
    List<Animal> animals = gson.fromJson(data, token.getType());
    
  2. # 2 楼答案

    科特林的例子:

    val gson = Gson()
    val typeToken = object : TypeToken<ArrayList<Animal>>() {}
    val list = gson.fromJson<ArrayList<Animal>>(value, typeToken.type)
    

    更快的方式:

    val gson = Gson()
    val array = gson.fromJson<Array<Animal>>(value, Array<Animal>::class.java)
    val arrayList = ArrayList(array.toMutableList())