Как разобрать объект JSON в пользовательский объект с помощью Gson? - PullRequest
1 голос
/ 10 мая 2011

У меня есть следующий объект JSON в виде строки:

[{"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 ]

7 голосов
/ 10 мая 2011

Ответ довольно прост, вы должны использовать аннотацию 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;
    }

}
2 голосов
/ 10 мая 2011

Я не уверен, что GSON знает, как отобразить ваш JSONArray из JSONObjects в ваш класс Book. У меня есть пара замечаний по поводу этой установки.

  • Если вы заметили, JSONObjects, которые составляют JSONArray, содержащий свойства "Add1" и "Short", но Ваша книга класса не имеет свойства, которые имеют одинаковые имена.

  • Типы должны быть отмечены. я догадываясь, что «Add1» собирается на карту к свойству числа (чисто угадайте), а тип String в JSONObject, но это int в Книжный класс.

  • Мне интересно, имеет ли место Свойства класса Book должны соответствует регистру JSONObject.

  • Ваш класс Книги не содержит открытый конструктор по умолчанию, который я думаю, что GSON нужно отобразить.

Выше приведена пара предложений, которые не обязательно являются правильными или полными, поскольку я раньше не использовал GSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...