繁体   English   中英

使用 gson 将 json 对象列表转换为 java 对象,得到 null

[英]Converting a list of json objects to java object using gson, gets null

我拥有的 Json 数据。

[

    {

        "code": "24",

        "name": "Rajsathan",

        "districts": [

                {"code":"1",

                 "name":"Jodhpur"},

                {"code":"2",

                 "name":"Nagore"}

                ]

    }

]

从文件中读取数据作为输入流。

BufferedReader br = new BufferedReader(new InputStreamReader(in));
Gson gson = new Gson();
String temp = null;
String total = null;
try {
  while((temp = br.readLine()) != null) {
    total+=temp;
  }
} catch (Exception e){
    e.printStactTrace();
}

现在我尝试了许多不同的方法来将此数据转换为 java 对象,但是在从 streamreader 转换每个流时传递完整的字符串总数或格式错误的 json 错误时得到空值。

StatesModel data = gson.fromJson(total, StatesModel.class);

// as its a list of json 
Type collectionType = new TypeToken<Collection<StatesModel>>(){}.getType();
Collection<StatesModel> json_data = gson.fromJson(total, collectionType);

但两者都不起作用。

statesModel 的 Java 类定义如下。

public class StatesModel {

    @SerializedName("code")
    public String code;

    @SerializedName("name")
    public String name;

    @SerializedName("districts")
    public List<DistrictModel> districts;

    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public List<DistrictModel> getDistricts() {
        return districts;
    }
    public void setDistricts(List<DistrictModel> districts) {
        this.districts = districts;
    }

}

和区类模型正在。

public class DistrictModel {

    @SerializedName("code")
    public String code;

    @SerializedName("name")
    public String name;

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

}

将此数据转换为可迭代的 javaObjects 的正确方法是什么。

您的 JSON 以[开头,这意味着我们需要一个StatesModel数组。 这可以从这样的文件中读取:

Reader reader = new FileReader("path_to_my_json.json");

Gson gson = new Gson();
StatesModel[] statesModels = gson.fromJson(reader, StatesModel[].class);

// do something with the array
Stream.of(statesModels).forEach(System.out::println);

StatesModel POJO:

public class StatesModel {
    private String code;
    private String name;
    private List<DistrictModel> districts;

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getName() {
        return name;
    }

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

    public List<DistrictModel> getDistricts() {
        return districts;
    }

    public void setDistricts(List<DistrictModel> districts) {
        this.districts = districts;
    }

    @Override
    public String toString() {
        return "StatesModel{" +
                "code='" + code + '\'' +
                ", name='" + name + '\'' +
                ", districts=" + districts +
                '}';
    }
}

DistrictModel POJO:

public class DistrictModel {
    private String code;
    private String name;

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getName() {
        return name;
    }

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

    @Override
    public String toString() {
        return "DistrictModel{" +
                "code='" + code + '\'' +
                ", name='" + name + '\'' +
                '}';
    }
}

工作代码可以在 github 上找到: https : //github.com/Ernyoke/gson-tutorial

你有两个选择。 您可以使用 FileReader,而不是使用 BufferReader,如下所示。 通过使用 FileReader,您编写了比以前更清晰的代码。

  1. 将 JSON 文件转换为 Java 对象
    Gson gson = new Gson();
    StatesModel StatesModel = gson.fromJson(new FileReader("C:\\myfile.json"), StatesModel.class);
  1. 将 JSON 字符串转换为 Java 对象
    Gson gson = new Gson();
    String json = '{"code": "24", "name": "Rajsathan", "districts": [ {"code":"1", "name":"Jodhpur"}, {"code":"2", "name":"Nagore"}]}';
    StatesModel StatesModel = gson.fromJson(json, StatesModel.class);   

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM