Gson 解析 Json 与列表<String>

Gson Parse Json with List<String>

我有一个 class 有一些字段:

public class GsonRepro {
    class A {
        private List<String> field1 = new ArrayList<>();
        private String name;
        private Integer status;

        public A(){
        }

        public List<String> getfield1() { return field1; }
        public void setField1(List<String> field1) { this.field1 = field1; }

        public String getName() { return name; }
        public void setName() { this.name = name; }

        public Integer getStatus() { return status; }
        public void setStatus(int status) { this.status = status; }
    }

    public static void main(String[] args) {
        String str = "{\"name\":\"my-name-1\",\"status\":0,\"field1\":[\"0eac6b1d3d494c2d8568cd82d9d13d5f\"]}";
        A a = new Gson().fromJson(str, A.class);
    }
}

所有字段都已解析,但 List<String> field1,我怎样才能让它工作?

解法:

上面的代码工作得很好。最初,我只是在列表字段中输入错误。

您可以尝试使用 TypeToken,就像 this 对另一个问题的回答。

对你来说它看起来像这样:

import java.lang.reflect.Type;
import com.google.gson.reflect.TypeToken;

...

Type type = new TypeToken<A>(){}.getType();
A a = new Gson().fromJson(str, type);

问候

我尝试使用您分享的上述代码,并且运行良好,没有任何问题。请检查以下代码并验证,

public static void main(String[] args) {
    String str = "{\"name\":\"my-name-1\",\"status\":0,\"field1\":[\"0eac6b1d3d494c2d8568cd82d9d13d5f\"]}";
    A a = new Gson().fromJson(str, A.class);
    System.out.println(a.getName());
    System.out.println(a.getStatus());
    System.out.println(a.getfield1());
}

以下是在控制台上打印的输出,

my-name-1
0
[0eac6b1d3d494c2d8568cd82d9d13d5f]
import java.util.ArrayList;
import java.util.List;

import com.google.gson.Gson;

class A {
    private List<String> field1 = new ArrayList<>();
    private String name;
    private Integer status;

    public A() {
    }

    public List<String> getfield1() {
        return field1;
    }

    public void setField1(List<String> field1) {
        this.field1 = field1;
    }

    public String getName() {
        return name;
    }

    public void setName() {
        this.name = name;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }
}

public class GsonParseList {
    public static void main(String[] args) {
        String str = "{'name':'my-name-1','status':0,'field1':['0eac6b1d3d494c2','d8568cd82d9d13d5f']}";
        A a = new Gson().fromJson(str, A.class);
        System.out.println(a.getfield1());
    }
}