我将以下JSON对象作为String:
[{"Add1":"101","Description":null,"ID":1,"Name":"Bundesverfassung","Short":"BV"},{"Add1":"220","Description":null,"ID":2,"Name":"Obligationenrecht","Short":"OR"},{"Add1":"210","Description":null,"ID":3,"Name":"Schweizerisches Zivilgesetzbuch","Short":"ZGB"},{"Add1":"311_0","Description":null,"ID":4,"Name":"Schweizerisches Strafgesetzbuch","Short":null}]
现在我创建了一个代表其中一个结果的类:
public class Book {
private int number;
private String description;
private int id;
private String name;
private String abbrevation;
public Book(int number, String description, int id, String name, String abbrevation) {
this.number = number;
this.description = description;
this.id = id;
this.name = name;
this.abbrevation = abbrevation;
}
}
现在我想使用Gson将JSON对象解析为Book对象列表。我试过这种方式,但显然它不起作用。我该如何解决这个问题?
public static Book[] fromJSONtoBook(String response) {
Gson gson = new Gson();
return gson.fromJson(response, Book[].class);
}
答案 0 :(得分:7)
答案很简单,您必须使用注释SerializedName
来指示JSON对象的哪个部分用于将JSON对象解析为Book对象:
public class Book {
@SerializedName("Add1")
private String number;
@SerializedName("Description")
private String description;
@SerializedName("ID")
private int id;
@SerializedName("Name")
private String name;
@SerializedName("Short")
private String abbrevation;
public Book(String number, String description, int id, String name, String abbrevation) {
this.number = number;
this.description = description;
this.id = id;
this.name = name;
this.abbrevation = abbrevation;
}
}
答案 1 :(得分:2)
我不确定GSON是否知道如何将JSONArray的JSONA映射映射到Book类。我对这个设置有几点看法。
如果你注意到,JSONObjects是哪个 组成JSONArray包含 属性“Add1”和“Short”,但是 你的Book课没有 具有相同名称的属性。
应注意类型。我是 猜测“Add1”将要映射 到数字属性(纯粹的 猜),类型是String中的 JSONObject,但它是一个int 预订课程。
我想知道是否是这样的 Book类属性需要 匹配JSONObject的情况。
您的Book类不包含 公共默认构造函数,我 认为GSON需要映射。
以上只是我提出的一些建议,由于我之前没有使用过GSON,因此不一定正确或完整。