JSONArray类型无法转换为JSONObject

时间:2018-12-04 09:19:57

标签: android json android-studio android-volley android-json

致电服务网络时,我遇到以下例外情况:类型org.json.JSONException:Value[{}]的{​​{1}}无法转换为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

6 个答案:

答案 0 :(得分:1)

您的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");
                        }

答案 1 :(得分:0)

尝试

 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

                        }
                    }
            );

答案 2 :(得分:0)

尽管答案可以解决您的情况,但查看您的JSON,显然它是一个数组而不是对象,但是JSON的正确格式可能是这样的:

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

没有“ [”,“]”和“,”。因此,这是我的解决方案,如果希望一直接收到一个对象,则应该更改您的API,仅向您发送一个对象,就像我上面提到的那样,否则,最后的“,”对于仅包含一个对象的数组是不正确的一个项目,无论如何,您必须将模型更改为除数组之外的数组[可以将其声明为类似List<Model> myModelList的列表],这样解析器才能正常工作。

答案 3 :(得分:0)

尝试这个

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();
    }

答案 4 :(得分:0)

尝试...应该是

JSONArray jsonarray = new JSONArray(response);

然后

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

   //your code
}

答案 5 :(得分:0)

这是我找到的解决方案,谢谢大家♥..

Port