2012-04-13 65 views
0

我有一個問題,我有點困惑。我對JSON相當陌生,並且在android API中獲取JSON值。我正在嘗試訪問我得到的響應中的數組。我得到的JSON代碼是這樣的:在Android中從JSON訪問對象

Response: 
{ 
"event": { 
    "participants": [] 
}, 
"status": "success" 
} 

我將如何訪問參與者數組並存儲它們的值。這是我目前正在嘗試的......但我似乎沒有得到我想要的。

try{ 
       //get the JSON values from the URL. 
       JSONObject json = jParser.getJSONFromUrl("http://somesite.com/api/find?"+"somevar="+someJavaStringVar); 

       json_event = json.getJSONObject("event"); 

       JSONArray json_array_participants = json_event.getJSONArray("participants"); 

} catch(JSONException e) { 

} 

我最困惑的事情是...什麼是陣列類型相當於。任何建議或推理的正確方法來獲得變量價值將是很好的...謝謝你們.. :)。

回答

1

認爲JSON實際上只是一個鍵值對。 JSONArray類型只是一個充滿對象的數組(如Object[]) - 它不知道它包含的對象是什麼或它們將用於什麼目的。它取決於您根據您所知的來源爲JSON流賦予意義。從我看到的代碼中,大部分看起來很好,但我不知道你的jParser.getJSONFromURL()在做什麼。通常情況下,你會從響應字符串構建JSON像這樣:

String jsonString = getJSONFromUrl("http://somesite.com/api/find?"+"somevar="+someJavaStringVar); 

JSONObject json = new JSONObject(jsonString) 

JSONObject json_event = json.getJSONObject("event"); 

JSONArray json_array_participants = json_event.getJSONArray("participants"); 

您可以通過像任何其他數組的數組進行迭代,以獲得子對象或什麼:

for(int i=0; i < json_array_participants.getLength(); i++) { 
    JSONObject participant = json_array_participants.getJSONObject(i); 
    // Do stuff 
} 

作爲一個方面說明 - 我除非你理解底層協議,否則不會使用GSON,至少有一點 - 因爲你永遠不知道什麼時候出於某種原因需要解析不同語言的JSON。

+0

其實這非常讓我很很多......因爲我能夠解決這個問題。事實證明我的老闆更新了json響應,幾天前我沒有知道,並擺脫了我正在尋找的領域...現在把所有正確的代碼,並得到一個不同的json對象數組,我已經轉換他們字符串,並將其卡在ListView中而沒有錯誤。 – jimbob 2012-04-13 18:54:16

+0

所以澄清:這是我正在尋找謝謝你的答案! – jimbob 2012-04-13 18:54:38

1

我強烈建議使用gson代替它作爲你的首選分析器,因爲除了創建域對象之外,它將完成序列化和反序列化的所有工作。 本教程應該讓你去: http://www.javacodegeeks.com/2011/01/android-json-parsing-gson-tutorial.html

+0

好的,但我真的想知道如何訪問應該返回一個名稱數組的參與者數組。謝謝。 { 「事件」:{ 「參與者」:[] }, 「狀態」:「成功」 } – jimbob 2012-04-13 17:50:09

1

這將取決於服務器應該返回什麼。它可能是一系列的任何事情,如果這是一個公共服務,應該有一個規範要脫離。

如果您負責服務器部分,並且您有後備對象,則Google的GSON庫非常易於使用。它也會保持類型信息的直接。