2013-04-12 33 views
1

因此,我正在研究一個Android應用程序,它將從遠程服務器(運行PHP)讀取JSON響應。一切正常,直到我嘗試從較大的JSON字符串讀取數組數據項。下面是Eclipse在嘗試將對象分析到數組中時拋出的錯誤。有人有主意嗎? JSONLint驗證這個數組是有效的JSON,所以我不確定這裏的問題是什麼。
注意 - 它是否讓我把這個元素解析爲一個JSONObject,但我不清楚如何從它那裏得到它到像我需要的關聯數組。我確實看到JSONObject有一個方法ToJSONArray,但它需要一個數組鍵,但這些變量是可變的,我不知道它們是什麼,直到我解析該死的數組!任何援助表示讚賞。從字符串中解析JSON數組問題

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" 
} 
} 
+1

「下面是錯誤的Eclipse拋出」< - 你忘了實際包括。 –

回答

0

您的JSONObject實際上是一個數組,其中第一對象密鑰是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") 

運作的?

+0

類型...我可以使用json.getJSONObject(「data」)。getJSONObject(「1」)來獲取我的數組的第一個元素。但是這要求我知道密鑰名是什麼 - 即1 ...在這種情況下密鑰實際上是數據庫唯一標識符,直到以後我才知道。沒有辦法在不知道密鑰被調用的情況下創建關聯數組? – mcenci

+0

[JSONObject](http://www.json.org/javadoc/org/json/JSONObject.html)有一個方法.keys(),它將返回您可以使用的對象中枚舉的鍵。 – drunkenRabbit

+0

太棒了!正是我需要的感謝! – mcenci

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>