Android:JSONObject无法转换为JSONArray

时间:2012-02-29 13:00:39

标签: java android json

我想使用JSON从php文件获取数据到Android。这是我的代码:

....
HttpEntity e = r.getEntity();
String data = EntityUtils.toString(e);
JSONArray timeline = new JSONArray(data);
JSONObject last = timeline.getJSONObject(0);
return last;

当我调试程序时,此行上有JSONException:

JSONObject last = timeline.getJSONObject(0);

数据为{"a":1,"b":2,"c":3,"d":4,"e":5},异常为:

org.json.JSONException: Value {"d":4,"e":5,"b":2,"c":3,"a":1} of type org.json.JSONObject cannot be converted to JSONArray

4 个答案:

答案 0 :(得分:2)

异常消息非常明确,看看JSON syntax diagrams应该是说明性的。您的代码收到的JSON字符串是:

{"a":1,"b":2,"c":3,"d":4,"e":5}

此字符串表示对象,而不是数组。数组的一个例子是:

[1, 2, 3, 4, 5]

甚至是这样:

[{"a":1,"b":2,"c":3,"d":4,"e":5}]

请注意开始和结束括号。

我认为你会发现异常位置有点误导。我不知道它是否是某种懒惰初始化或其他东西的结果,但我相信原因实际上是这一行:

JSONArray timeline = new JSONArray(data);

由于data字符串表示JSON对象而不是数组,因此显然不可能执行此操作。

答案 1 :(得分:1)

在Json数组中使用[]进行描述。 在那里,您定义了一个具有五个属性的对象。

答案 2 :(得分:0)

JSONArray timeline = new JSONArray(data);
// change JSONArray to JSONObject

JSONObject timeline = new JSONObject(data);// Like This

您的JSON数据不是数组。

答案 3 :(得分:0)

你的json响应是Object形式,而不是Array形式。所以你必须简单地解析你的json对象。假设“data”是响应中的JSONObject标记。 以下是解析的方法:

           HttpEntity e = r.getEntity();
           String result = EntityUtils.toString(e);
           JSONObject response=new JSOBObject(result);
           JSONOBject Data=response.getJSONObject("data");
           int a=Data.getInt("a");
           int b=Data.getInt("b");
           int c=Data.getInt("c");
           int d=Data.getInt("d");
           int e=Data.getInt("e");

感谢。