如何使用Gson将JSON对象解析为自定义对象?

时间:2011-05-10 14:49:48

标签: android gson

我将以下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);
    }

2 个答案:

答案 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,因此不一定正确或完整。