android列表视图中的JSONParser异常



我正在尝试开发一个json解析器应用程序。这里我得到了一个json解析器异常错误,如"jsonarray cannot be converted to jsonobject"

我有以下JSON格式:

[
{
    "status": "ok",
    "data": [
        {
            "term_id": "28",
            "name": "All Meets",
        },
        {
            "term_id": "4",
            "name": "Classic Cars",
            },
         {
            "term_id": "30",
            "name": "Trucks",
           }
    ],
    "controller": "user1"
},
0
]

这是抛出异常的代码:

class GetCategories extends AsyncTask<String, String, String> {
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }
    @Override
    protected String doInBackground(String... args) {
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        JSONObject json = jsonParser.makeHttpRequest(url_getcategories, "POST", params);
        Log.d("Get Categories", json.toString());
        try {
            success = json.getString(TAG_SUCCESS); 
            if (success.equalsIgnoreCase("ok")) {
                JSONArray sys  = json.getJSONArray(TAG_CATEGORY);
                System.out.println("List of  Array =" + " " + sys); 
                for (int i = 0; i < sys.length(); i++) {
                    JSONObject c = sys.getJSONObject(i);
                    String cartitle = c.getString("name");
                     System.out.println("List of  Categories =" + " " + cartitle);   
                }          
            } else {
                error = json.getString(TAG_ERROR); 
                }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    } 
    @Override
    protected void onPostExecute(String file_url) {
        super.onPostExecute(file_url);
    }
}

从上面的代码来看,功能有什么问题?请检查并提供解决方案。

When i put your J son format in `http://www.jsoneditoronline.org/` , It gave me issue.
 So, i formatted it to 
   {
    "status": "ok",
    "data": [
        {
            "term_id": "28",
            "name": "All Meets"
        },
        {
            "term_id": "4",
            "name": "Classic Cars"
        },
         {
            "term_id": "30",
            "name": "Trucks"
         }
    ],
    "controller": "user1"
   } 

我认为您的代码可以使用这种格式。您可以参考Android JSON Parser教程来获得更详细的问题解决方案。

JSON数组和JSONobject之间有区别。前者包含在[]中,后者包含在{}中。

你有一个数组,你正试图从中创建一个对象。

如果世界是一个合理的地方,那么JSONObjectJSONArray都来自同一个类,您可以实例化它,然后询问它是数组还是对象。但可悲的是,这个世界有时会做一些愚蠢的事情。

您的是JSON数组[],而不是JSON对象{}。首先将字符串转换为JSON数组。

试试这种方法,希望这能帮助你解决问题

class GetCategories extends AsyncTask<String, String, ArrayList<HashMap<String,String>>> {
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }
    protected ArrayList<HashMap<String,String>> doInBackground(String... args) {
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        JSONArray json = jsonParser.makeHttpRequest(url_getcategories, "POST", params);
        ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String, String>>();
        try  {
            if (json.getJSONObject(0).getString(TAG_SUCCESS).equalsIgnoreCase("ok")) {
                JSONArray sys  = json.getJSONArray(TAG_CATEGORY);
                for (int i = 0; i < sys.length(); i++) {
                    HashMap<String,String> row = new HashMap<String, String>();
                    row.put("term_id",sys.getJSONObject(i).getString("term_id"));
                    row.put("name", sys.getJSONObject(i).getString("name"));
                    list.add(row);
                }
            }
            else{
                error = json.getJSONObject(0).getString(TAG_ERROR);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return list;
    }
    protected void onPostExecute(ArrayList<HashMap<String,String>> result) {
        super.onPostExecute(result);
    }
}

最新更新