Читайте возвращение Json с Gson, когда имя «параметра» меняется - PullRequest
0 голосов
/ 20 октября 2019

Я работаю над приложением-клиентом для соединения с Open Library API (https://openlibrary.org/developers/api), чтобы получить некоторую информацию с помощью Json, возвращаемую Gson из Google, но у меня проблема с одним изменяемым параметром / свойствомde name. Я отправил этот запрос https://openlibrary.org/api/books?bibkeys=ISBN:9788580415544&jscmd=details&format=json с поиском по ISBN (9788580415544), а в возвращении json есть атрибут с этим номером (ISBN: 9788580415544), и я не могу взять информацию внутрь. Если я изменю запрос с помощьюдругой ISBN Я получу JSON с другим именем параметра / свойства

Пожалуйста, как я могу это сделать?

Часть возвращаемого файла

{
   "ISBN:9788580415544": {
      "info_url": "https://openlibrary.org/books/OL26851485M/O_Guia_Definitivo_do_Mochileiro_das_Galáxias_(Em_Portuguese_do_Brasil)",
      "bib_key": "ISBN:9788580415544",
      "preview_url": "https://openlibrary.org/books/OL26851485M/O_Guia_Definitivo_do_Mochileiro_das_Galáxias_(Em_Portuguese_do_Brasil)",
      "thumbnail_url": "https://covers.openlibrary.org/b/id/8540059-S.jpg",
      "details": {
         "publishers": [
            "Arqueiro"
         ],
         "classifications": {},
         "key": "/books/OL26851485M",
         "source_records": [
            "amazon:8580415543"
         ],
         "title": "O Guia Definitivo do Mochileiro das Galáxias (Em Portuguese do Brasil)",
         "identifiers": {},
         "covers": [
            8540059
         ]
      }
   }
}

Модель класса

public class Objeto {

    private ObjetoDetalhe obejtodetalhe;

    public ObjetoDetalhe getObejtodetalhe() {
        return obejtodetalhe;
    }

    public void setObejtodetalhe(ObjetoDetalhe obejtodetalhe) {
        this.obejtodetalhe = obejtodetalhe;
    }

    public class ObjetoDetalhe {
        private String info_url;
        private String bib_key;
        private String preview_url;
        private String thumbnail_url;

        public String getInfo_url() {
            return info_url;
        }

        public void setInfo_url(String info_url) {
            this.info_url = info_url;
        }

        public String getBib_key() {
            return bib_key;
        }

        public void setBib_key(String bib_key) {
            this.bib_key = bib_key;
        }

        public String getPreview_url() {
            return preview_url;
        }

        public void setPreview_url(String preview_url) {
            this.preview_url = preview_url;
        }

        public String getThumbnail_url() {
            return thumbnail_url;
        }

        public void setThumbnail_url(String thumbnail_url) {
            this.thumbnail_url = thumbnail_url;
        }

    }

Часть кода

{
Gson gson = new Gson();
Objeto obj = new Objeto();
obj = gson.fromJson(jsonBook.toString(), Objeto.class);

System.out.println(obj.getObejtodetalhe().getInfo_url());
System.out.println(obj.getObejtodetalhe().getThumbnail_url());
}

Ответы [ 2 ]

2 голосов
/ 20 октября 2019

Я бы предложил прочитать объект верхнего уровня как Map<String, ObjetoDetalhe>

{
   "ISBN:9788580415544": {...}
}

"ISBN:9788580415544" будет ключом, а {...} будет ObjetoDetalhe объектом.

1 голос
/ 20 октября 2019
public class Objeto {

    private map<String, ObjetoDetalhe> obejtodetalhe;

    ....

Пожалуйста, измените модель

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