我正在尝试开发一个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之间有区别。前者包含在[]
中,后者包含在{}
中。
你有一个数组,你正试图从中创建一个对象。
如果世界是一个合理的地方,那么JSONObject
和JSONArray
都来自同一个类,您可以实例化它,然后询问它是数组还是对象。但可悲的是,这个世界有时会做一些愚蠢的事情。
您的是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);
}
}