How to use gson to convert json to arraylist if th

2020-08-16 04:02发布

问题:

I want to store an arraylist to disk, so I use gson to convert it to string

    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;
}

output string:

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

Now I want use this string to convert back to arraylist

I know I should use something like:

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

But this is not correct, what is the correct syntax?

回答1:

you can use the below code to convert json to corresponding list of objects

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


回答2:

Kotlin example:

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

Faster way:

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