2010-04-01 61 views
0

我正在研究如何使用JSON-ME解析Twitter的JSON響應。BlackBerry中的JSON解析問題

例如:

http://apiwiki.twitter.com/Twitter-Search-API-Method:-search 
foo({"results":[{"profile_image_url":"http://a3.twimg.com/profile_images/762620209/drama_queen-6989_normal.gif","created_at":"Thu, 01 Apr 2010 02:35:10 +0000","from_user":"TWEETSDRAMA","to_user_id":null,"text":"NEW Twitter Lists Widget - How to put it on your blog or site http://bit.ly/47NCi6","id":11401539152,"from_user_id":95081097,"geo":null,"iso_language_code":"en","source":"<a href="http://ping.fm/" rel="nofollow">Ping.fm</a>"}... (content truncated) 

這裏是我的方法:

public void parseDataFromJSON(String strjson) throws JSONException { 
JSONTokener jtoken = new JSONTokener(strjson); 
JSONArray jsoarray = new JSONArray(jtoken); 
JSONObject jsobj = jsoarray.getJSONObject(0); 

tweeter_profile_image_url = jsobj.optString("profile_image_url"); 
tweeter_created_at = jsobj.optString("created_at"); 
tweeter_from_user = jsobj.optString("from_user"); 
tweeter_to_user_id = jsobj.optString("to_user_id"); 
tweeter_text = jsobj.optString("text"); 
tweeter_id = jsobj.optInt("id"); 
tweeter_from_user_id = jsobj.optInt("from_user_id"); 
tweeter_geo = jsobj.optString("geo"); 
tweeter_iso_language_code = jsobj.optString("iso_language_code"); 
tweeter_source = jsobj.optString("source") 
} 

當我運行它在模擬器上,什麼也沒有顯示,所以我檢查調試器,輸出功率爲: 狀態:200 content:{「results」:[{「profile_image_url」:「http://a1.twimg.com/profile_images/746683548/Photo_on_2010- .....」> OK,我收到了JSON內容

org.json.me.JSONEx ception:JSONArray文本必須在{「results」:[{「profile_image_url .... --->的字符1處以'['開始,但不知何故無法正確處理。

那麼如何正確解析呢?

回答

2

的反應本身就是一個對象,所以你只需要這樣分析它:

JSONObject jsobj = new JSONObject(strjson); 

這是用一個鍵,「結果」,它本身就是一個數組的對象。所以,你會做這樣的事情:

JSONArray jsoarray = jsobj.getJSONArray("results"); 

那麼「jsoarray」數組中的每個元素將是一個JSONObject,等等等,你可以看到不同的JSON對象是如何相互嵌套... OK。

+0

OK。我仍然困惑。 jsoarray中有很多元素(JSONObjects)。假設我想訪問第一個元素: 假設我想訪問第一個元素: JSONObject foo = jsoarray.getJSONObject(0); FOO有很多鍵:profile_image_url,created_at,tweeter_id,等我想知道是什麼價值「profile_image_url」了,所以我這樣做: tweeter_profile_image_url = foo.getString(「profile_image_url」) 它仍然崩潰。嗯...... – anta40 2010-04-05 03:53:55

+0

如果有可能JSONObject中的某個鍵可能不存在,請使用optString而不是getString,否則它將拋出JSONException。 – 2010-04-05 04:13:36

+0

剛剛試過這個: tweeter_profile_image_url = foo.optString(「profile_image_url」); 它仍然崩潰。 但是,當我試試這個: Dialog.inform(「foo.length():」+ foo.length()); 消息框會顯示11,這是正確的。 – anta40 2010-04-05 05:35:59