使用子数组解析数据android时出错

时间:2015-04-07 11:52:51

标签: android json

这是我的查询的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

我认为这个问题与子阵列有关:[....]也许。

我无法达成解决方案。有人可以帮帮我吗?

5 个答案:

答案 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"}]

了解更多

http://php.net/manual/en/function.json-encode.php

答案 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"));
                }
            }