1

因此,我正在开发一个 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"
}
}
4

2 回答 2

1

您的 JSON 不是数组。

它是一个包含一个名为“1”的对象的对象,该对象包含许多属性。在 JSON 中,数组以以下方式开始[和结束,] 例如:

{ "myStringArray" : [ "adsf", "qwer" ] }

或者

{ "myObjectArray" : [ 
  { "prop1" : "asdf", "prop2" : "qwer" },
  { "prop1" : "zxcv", "prop2" : "qwer" }
]}

更进一步,我建议不要使用 JSONObject/JSONArray 的东西并使用功能强大的库。我更喜欢 Jackson,但是当我评估它时,我发现它太大了,我觉得将它放在一个 android 项目中感觉很好,所以我选择了 GSON。

使用更好的库,您可以将对象映射到 a Map<String, Object>,或者如果您提供的样本表明您的数据将始终如一,您可以将其映射到Map<String, String>

于 2013-04-12T20:23:07.000 回答
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")

那样有用吗 ?

于 2013-04-12T20:29:53.680 回答