这是我的查询的JSON结果。
{
"_id":{"$id":"551fb585ecba12c819000032"},
"nome":"Google","loc":[-122.083983,37.422969],
"icona":1,
"istituzione_id":{"$id":"551fb556ecba12c819000031"}
}
{
"_id":{"$id":"5520fe2becba12c003000029"},
"nome":"Oracle","loc":[-122.262168,37.531595],
"icona":1,
"istituzione_id":{"$id":"551fb556ecba12c819000031"}
}
我试图以这种方式解析JSON结果:
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
Log.e("log_a_line", line);
sb.append(line + "\n");
}
is.close();
result = sb.toString();
Log.e("log_a_result", result);
} catch (Exception e)
{
Log.e("log_tag_convert", "Error converting result" + e.toString());
}
//-----PARSER----
try {
JSONArray jArray = new JSONArray(result);
for (int i = -1; i < jArray.length() - 1; i++) {
JSONObject json_data = jArray.getJSONObject(i);
Log.i("log_tag", "id:" + json_data.getString("_id"));
}
}
catch (JSONException e)
{
Log.e("log_tag_parsing", "Error parsing data" + e.toString());
}
但是在运行应用程序后,在我的logcat中发现了错误:
log_tag_parsing﹕ Error parsing dataorg.json.JSONException: Value {"icona":1,"loc":[-122.083983,37.422969],"nome":"Google","istituzione_id":{"$id":"551fb556ecba12c819000031"},"_id":{"$id":"551fb585ecba12c819000032"}} of type org.json.JSONObject cannot be converted to JSONArray
我认为这个问题与子阵列有关:[....]也许。
我无法达成解决方案。有人可以帮帮我吗?
答案 0 :(得分:1)
你错过了对象之间的逗号;对数组使用[]
,对象使用{}
。
下次使用jsonlint.com首先验证您的JSON。
答案 1 :(得分:0)
org.json.JSONObject无法转换为JSONArray
答案就在你的例外中。您正在尝试将jsonobject转换为jsonArray。
将结果转换为JsonObject
答案 2 :(得分:0)
在这里看到你正在获得JSONObject。但是在解析时,你期待JSONArray。
解析之前首先在结果中添加一个检查。
E.g。
if (resultObj instanceof JSONArray) {
// process Array
}
else if (resultObj instanceof JSONObject) {
// processObj
}
答案 3 :(得分:0)
Json数组语法应该像这样
员工是数组名称
[] //对于在一个对象和另一个对象之间包含对象{}的数组,
"employees":[
{"firstName":"John", "lastName":"Doe"},
{"firstName":"Anna", "lastName":"Smith"},
{"firstName":"Peter","lastName":"Jones"}
]
创建正确的json数组
修改
生成json数组
$a = array(
array('foo' => 'bar'),
array('foo' => 'baz'));
$json = json_encode($a);
给出
[{"foo":"bar"},{"foo":"baz"}]
了解更多
答案 4 :(得分:0)
为什么你的for循环的起始值为-1并将日志打印行更改为。请参阅以下代码:
//-----PARSER----
try {
JSONArray jArray = new JSONArray(result);
for (int i = -1; i < jArray.length() - 1; i++) { //this line
JSONObject json_data = jArray.getJSONObject(i);
Log.i("log_tag", "id:" + json_data.getString("_id"));//this line
}
}
将上述两行更改为:
//-----PARSER----
try {
JSONArray jArray = new JSONArray(result);
for (int i = 0; i < jArray.length(); i++) { //this line
JSONObject json_data = jArray.getJSONObject(i);
Log.i("log_tag", "id:" + json_data.getString("$id"));
}
}