所以,我正在开发一个Android应用程序,它将从远程服务器(运行PHP)读取JSON响应。一切正常,直到我尝试从较大的JSON字符串中读取数组数据项。下面是Eclipse在尝试将对象解析为数组时抛出的错误。有人有主意吗? JSONLint验证此数组是有效的JSON,所以我不确定这里的问题是什么 注意 - 它让我将这个元素解析为一个JSONObject,但我不清楚如何从它那里得到它像我需要的关联数组。我确实看到JSONObject有一个方法ToJSONArray,但它需要一个数组键列表,但那些是可变的,我不知道它们是什么,直到我解析该死的数组!任何帮助表示赞赏。
public JSONArray parseJson(String jsonString) {
JSONArray data = new JSONArray();
try {
JSONObject json = new JSONObject(jsonString);
success = json.getBoolean("success");
object = json.getString("object");
message = json.getString("message");
data = json.getJSONArray("data")
} catch (JSONException e) {
Log.e("ServerResponse::parseJson", e.getMessage());
e.printStackTrace();
success = false;
message = "Error parsing return JSON data. " + e.getCause();
}
return data;
}
这是我正在尝试解析的JSON数组:
{
"1": {
"country_of_origin": "US",
"genre": "Action",
"date_finished": "2005-06-17",
"dtimemod": "2009-12-03 14:29:59",
"netflix_rating": "82",
"table": "movies",
"rotten_rating": "82",
"format": "Live Action",
"date_begun": "2005-06-17",
"id": "3055",
"dtimecre": "2009-12-03 14:29:59",
"name": "Batman Begins",
"user_id": "mcenci",
"year": "2005",
"actors": "Christian Bale, Michael Caine, Liam Neeson, Morgan Freeman, Gary Oldman, Ken Watanabe, Katie Holmes, Cillian Murphy, Tom Wilkinson, Rutger Hauer, Sara Stewart, Richard Brake, Gus Lewis",
"rating": "100",
"extra_info": "Runtime: 140 min\n",
"public": "0",
"notes": "",
"key": "103",
"genre2": "Sci-Fi"
}
}
答案 0 :(得分:1)
您的JSON不是数组。
这是一个包含名为“1”的单个对象的对象,该对象包含许多属性。在JSON中,数组以[
开头,以]
结尾。例如:
{ "myStringArray" : [ "adsf", "qwer" ] }
或
{ "myObjectArray" : [
{ "prop1" : "asdf", "prop2" : "qwer" },
{ "prop1" : "zxcv", "prop2" : "qwer" }
]}
更进一步,我建议不要使用JSONObject / JSONArray并使用功能强大的库。我更喜欢杰克逊,但是当我评估它时,我发现它太大了让我感觉很好将它放在一个Android项目中,所以我选择了GSON。
使用更好的库,您可以将对象映射到Map<String, Object>
,或者如果您提供的示例表明您的数据总是如此,则可以将其映射到Map<String, String>
答案 1 :(得分:0)
您的JSONObject实际上是第一个Object键为1的数组。 试试:
JSONObject json = new JSONArray(jsonString).getJSONObject(0);
// or JSONObject json = new JSONObject(jsonString).getJSONObject("1");
success = json.getBoolean("success");
object = json.getString("object");
message = json.getString("message");
data = json.getJSONArray("data")
这有用吗?