【问题标题】:Type JSONArray cannot be converted to JSONObjectJSONArray 类型无法转换为 JSONObject
【发布时间】:2019-05-05 16:09:22
【问题描述】:

当我调用我的服务网站时,我遇到了这个异常:org.json.JSONArray 类型的 org.json.JSONException:Value[{}] 无法转换为 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":"..."},]

【问题讨论】:

  • 在响应监听器中将 JSONObject 更改为 JSONArray
  • 你必须使用JsonArrayRequest 而不是JsonObjectRequest

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      试试这个...应该是

      JSONArray jsonarray = new JSONArray(response);
      

      然后

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

      【讨论】:

        【解决方案4】:

        试试这个

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

        【讨论】:

          【解决方案5】:

          虽然答案可以处理你的情况,但看看你的 JSON,它显然是一个数组而不是一个对象,你的 JSON 的正确格式可能是这样的:

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

          其中没有“[”、“]”和“,”。所以这是我的解决方案,如果预计它一直只接收一个对象,你应该改变你的 API,只向你发送我上面提到的一个对象,否则,最后的那个“,”对于一个数组来说是不正确的一个单独的项目,无论如何,您必须将模型更改为除了数组[您可以将其声明为列表,如:List&lt;Model&gt; myModelList],以便解析器正常工作。

          【讨论】:

            【解决方案6】:

            试试

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

            【讨论】:

              猜你喜欢
              • 2021-07-22
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多