Разбор объекта JsonArray из строки в объект java, возвращающий исключение - PullRequest
0 голосов
/ 16 июня 2020

Я хочу иметь возможность анализировать ответ сервера на объект Java с помощью GSON, это мой код:

public void test() throws IOException {
        Gson gson = new Gson();
        final String uri= BASIC_URL.concat("/?apikey=772f549d&s=prom&y=2020");
        simpleHttpClient = new SimpleHttpClient();
        String response = simpleHttpClient.sendGetRequest(BASIC_URL.concat("/?apikey=772f549d&s=prom&y=2020"), headersMap);
        JsonArray array = JsonHandler.asList(response, "Search");
        Type listType = new TypeToken<List<ImdbClass>>(){}.getType();
        Object obj = array.toString().getClass();
        List<ImdbClass> lists = gson.fromJson(array.toString(), listType);
        ImdbClass imdbClass = gson.fromJson(array.toString(), ImdbClass.class);
}

Это желаемая Json строка массива, которую необходимо проанализировать в объект java:

[
  {
    "Title": "Killer Prom",
    "Year": "2020",
    "imdbID": "tt10814308",
    "Type": "movie",
    "Poster": "N/A"
  },
  {
    "Title": "Prom Knight",
    "Year": "2020–",
    "imdbID": "tt12143924",
    "Type": "series",
    "Poster": "https://m.media-amazon.com/images/M/MV5BMmRmN2QzMzQtYzdiZS00ZTEzLTg4ODgtYmY1MzBmMTM3ZGIzXkEyXkFqcGdeQXVyMTE1Mjg1MjU2._V1_SX300.jpg"
  }
]

, и это мой класс для анализа:

public class ImdbClass {

    String Title;
    String Year;
    String imdbID;
    String Type;
    String Poster;

    public ImdbClass(){}
}

Но когда я перехожу к последней строке в моем коде, я получаю следующую ошибку:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $

хотя мой массив представляет собой массив объектов, что мне не хватает?

1 Ответ

0 голосов
/ 16 июня 2020

Последняя строка в вашем коде пытается десериализоваться из массива в один объект, т.е.

ImdbClass imdbClass = gson.fromJson(array.toString(), ImdbClass.class);

Исключение сообщает вам, что нужно выполнить десериализацию из строки json в ImdbClass. class, он не ожидал, что данные JSON будут в формате массива.

Предыдущая строка,

List<ImdbClass> lists = gson.fromJson(array.toString(), listType);

выглядит так, как будто она уже должна была создать вам List of ImdbClass - вам вообще нужна последняя строка? Вы должны иметь возможность перебирать список и получать к ним доступ, например,

for (ImdbClass movie : lists)
{
   // do something with movie
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...