Тип JSONArray не может быть преобразован в JSONObject

Когда я вызываю свой веб-сервис, у меня есть это исключение: org.json.JSONException:Value[{}] типа org.json.JSONArray нельзя преобразовать в JSONObject

private void jsonParse(){
        String url="http://192.168.56.1:8095/rest/workouts/all";
        JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        try {
                            JSONArray jsonArray = response.getJSONArray("");

                            for(int i = 0; i < jsonArray.length(); i++) {
                                JSONObject w = jsonArray.getJSONObject(i);

                                String title = w.getString("title");
                                String goal = w.getString("goal");

                                txtv.append(title + ", " + goal +"\n\n");
                            }
                        ...

Кстати, это формат JSON

[{"id":"1","title":"title","goal":"goal","exercice":"Exercice 
1","difficulty":"Beginner","duration":"3","image":"..","description":"..."},]

person Mohamed Ali Lassoued    schedule 04.12.2018    source источник
comment
Измените JSONObject на JSONArray в прослушивателе ответов.   -  person Samuel Robert    schedule 04.12.2018
comment
Вы должны использовать JsonArrayRequest вместо JsonObjectRequest   -  person Savin Sharma    schedule 04.12.2018


Ответы (6)


Попробуйте это

try{

        JSONArray jsonArray = new JSONArray(response.string());
        for (int i=0;i<jsonArray.length();i++){

            String Title=jsonArray.getJSONObject(i).getString("title");
            String Goal=jsonArray.getJSONObject(i).getString("goal");

        }
    }
    catch (Exception e){
        e.printStackTrace();
    }
person Rahul Chokshi    schedule 04.12.2018

Ваш ответ json на самом деле является JsonArray, поэтому вам нужно изменить свой код на:

private void jsonParse(){
    String url="http://192.168.56.1:8095/rest/workouts/all";
    JsonArrayRequest request = new JsonArrayRequest(Request.Method.GET, url, null,
            new Response.Listener<JSONArray >() {
                @Override
                public void onResponse(JSONArray response) {
                    try {


                        for(int i = 0; i < response.length(); i++) {
                            JSONObject w = response.getJSONObject(i);

                            String title = w.getString("title");
                            String goal = w.getString("goal");

                            txtv.append(title + ", " + goal +"\n\n");
                        }
person Alex    schedule 04.12.2018

Это решение, которое я нашел, спасибо всем, ребята ♥ ..

    private void jsonParse(){
        String url="http://192.168.56.1:8095/rest/workouts/all";
        JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET,url,null,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray jsonArray) {
                        try {
                            
                            for(int i = 0; i < jsonArray.length(); i++) {


                                JSONObject jsonobject = jsonArray.getJSONObject(i);

                                String title = jsonobject.getString("title");
                                String goal = jsonobject.getString("goal");

                                txtv.append(title + ", " + goal +"\n\n");
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {

                    }
                });
        mQueue.add(jsonArrayRequest);
    }

person Mohamed Ali Lassoued    schedule 04.12.2018

Пытаться

 JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(
                    Request.Method.GET,
                    url,
                    null,
                    new Response.Listener<JSONArray>() {
                        @Override
                        public void onResponse(JSONArray response) {

                            for(int i = 0; i < response.length(); i++) {
                            JSONObject w = response.getJSONObject(i);

                            String title = w.getString("title");
                            String goal = w.getString("goal");

                            txtv.append(title + ", " + goal +"\n\n");
                             }

                            }catch (JSONException e){
                                e.printStackTrace();
                            }
                        }
                    },
                    new Response.ErrorListener(){
                        @Override
                        public void onErrorResponse(VolleyError error){
                            // Do something when error occurred

                        }
                    }
            );
person Benjamin    schedule 04.12.2018

Хотя ответы могут обрабатывать ваш случай, но, глядя на ваш JSON, это явно массив, а не объект, правильный формат вашего JSON может быть примерно таким:

{"id":"1","title":"title","goal":"goal","exercice":"Exercice1","difficulty":"Beginner","duration":"3","image":"..","description":"..."}

Которые не имеют "[", "]" и ",". Итак, вот мое решение, если ожидается, что он будет получать только один объект все время, вы должны изменить свой API, отправив вам только объект, как я упоминал выше, в противном случае это "," в конце неверно для массива, имеющего только что один элемент, и в любом случае вы должны изменить свою модель, за исключением массива [который вы можете объявить как список, например: List<Model> myModelList], чтобы синтаксический анализатор работал нормально.

person Mohammed    schedule 04.12.2018

попробуй так... Должно быть

JSONArray jsonarray = new JSONArray(response);

а потом

for(int i=0; i < jsonarray.length(); i++) {
   JSONObject jsonobject = jsonarray.getJSONObject(i);

   //your code
}
person Ramkumar.M    schedule 04.12.2018