Ошибка: тип org.json.JSONArray не может быть преобразован в JSONObject

Я новичок в Android Studio, и у меня проблема с анализом JSON. Вот мой JSON:

[{
        id: 304,
        Title: "Anna and the Apocalypse",
        Year: "2017",
        Released: "30 Nov 2018",
        Runtime: "93 min",
        Genre: "Comedy, Fantasy, Horror, Musical",
        Director: "John McPhail",
        Writer: "Alan McDonald, Ryan McHenry",
        Actors: "Ella Hunt, Malcolm Cumming, Sarah Swire, Christopher Leveaux",
        Language: "English",
        Country: "UK",
        Awards: "1 nomination.",
        PosterLow: "http://movie30t.co/wp-content/themes/m30t/timthumb.php?src=http://movie30t.co/wp-content/uploads/2018/09/Anna-and-the-Apocalypse-2017.jpg&h=200%&w=133&zc=0",
        PosterHigh: "http://movie30t.co/wp-content/themes/m30t/timthumb.php?src=http://movie30t.co/wp-content/uploads/2018/09/Anna-and-the-Apocalypse-2017.jpg&h=700%&w=500%&zc=0",
        IMDBScore: "6.2",
        Production: "Orion Pictures",
        DL720pLink: "http://dl2.hostgig.ir/dl/f/Anna%20and%20the%20Apocalypse%202018/Anna%20and%20the%20Apocalypse%202018%20720p%20BRRip%20MOVIE30T.CO.mkv",
        DL1080pLink: "N/A",
        SubtitleLink: "N/A",
        DLDubLink: "N/A",
        State: "True",
        Status: "Active",
        ViewCount: "157",
        VoteLike: "0",
        VoteDisslike: "0",
        TrailerLink: "http://dl2.hostgig.ir/dl/t/f/Anna and the Apocalypse 2018/Anna and the Apocalypse 2018.mp4",
        Response: true,
        Type: "Movie"
      }]

Я пытаюсь разобрать это так:

RequestQueue queue = new Volley().newRequestQueue(this);
        final JsonObjectRequest jsonArrayRequest = new JsonObjectRequest(Request.Method.GET, url, null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        Gson gson = new Gson();
                        MovieModel movieModel = gson.fromJson(response.toString(), MovieModel.class);
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(MainActivity.this, error.toString(), Toast.LENGTH_SHORT).show();
                    }
                });

                queue.add(jsonArrayRequest);

Я получаю следующую ошибку:

type org.json.JSONArray cannot be converted to JSONObject

Я знаю, что мне нужно использовать JsonArrayRequest вместо JsonArrayRequest, но я не знаю, как тогда получить объекты? Я искал некоторые другие сообщения, но я не понял!

Не могли бы вы помочь мне научиться этому?

Поскольку JSON, который вы пытаетесь проанализировать, является не JSONObject, а JSONArray, если вы хотите проанализировать JSONObject, попробуйте удалить «[» «]» в начале и в конце JSON.

vc73 02.05.2019 11:07

@ vc73 Я получаю этот Json из API, но не могу получить к нему доступ!

Emad 02.05.2019 11:08

в этом случае попробуйте вместо этого проанализировать JSONArray

vc73 02.05.2019 11:11

По какой причине вы используете gson? Можно просто проанализировать это с помощью JSONArray/JSONObject.

Han 02.05.2019 11:21
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
4
57
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий
    RequestQueue queue = new Volley().newRequestQueue(this);
            final JsonObjectRequest jsonArrayRequest = new JsonObjectRequest(Request.Method.GET, url, null,
                    new Response.Listener< JSONArray>() {
                        @Override
                        public void onResponse(JSONArray response) {
                            Gson gson = new Gson();

List<MovieModel> movieModels = gson.fromJson(response.toString(), List.class);
MovieModel movieModal = movieModels.get(0);
                        }
                    },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            Toast.makeText(MainActivity.this, error.toString(), Toast.LENGTH_SHORT).show();
                        }
                    });

                    queue.add(jsonArrayRequest);

Вы уже получаете response как JSONArray.

Итак, вы можете вызвать

JSONObject jresponse = response.getJSONObject(0);

внутри onResponse проанализируйте свой ответ.

JSONObject jresponse = response.getJSONObject(0);
String title= jresponse.getString("Title");
Log.d("title", title);

Я надеюсь, что это поможет вам.

Другие вопросы по теме