2012-10-12 88 views
1

在搜索了很多沒有結果之後,我最終決定在這裏提出這個問題。Android:解析未知的JSON標籤

這是從這個Facebook的博客文章的摘錄:https://developers.facebook.com/blog/post/592/

{ 
. . . 
     "story": "Dhiren Patel likes Marmot.", 
     "story_tags": { 
     "19": [ 
      { 
      "id": 101961456910, 
      "name": "Marmot", 
      "offset": 19, 
      "length": 6 
      } 
     ], 
     "0": [ 
      { 
      "id": 1207059, 
      "name": "Dhiren Patel", 
      "offset": 0, 
      "length": 12 
      } 
     ] 
     }, 
. . . 
} 

我使用上面的例子來自於哪個博客,但本質上,使用FB圖形API當數據集是一樣的。現在,我知道如何解析JSONObjects以及JSONArrays嵌套和所有。但我對這種數據毫無頭緒。 和在這個例子中是由嵌套的offset標籤決定的,並且在帖子之間變化。我如何解釋未知的JSON標籤和代碼以獲取其中的信息?

回答

4

據我所知,你的問題是你不知道如何獲取密鑰,這些密鑰是根據帖子或其他內容動態生成的(例如,在json中:19,0)。下面是你應該解析這個JSON的方式:

JSONObject mStoryTags = mMainObj.getJSONObject("story_tags"); 
if(mStoryTags != null){ 
    Iterator<Object> keys = mStoryTags.keys(); 
    while(keys.hasNext()){ 
     String id = String.valueOf(keys.next()); // This value represent 19 
     JSONArray mTag = mStoryTags.getJSONArray(id); 
     if(mTag != null){ 
      for(int i = 0; i < mTag.length();i++){ 
       JSONObject mElem = mTag.getJSONObject(i); 
       if(mElem != null){ 
        int objectId = mElem.getInt("id"); // value: 101961456910 
        // and etc. 
       } 
      } 
     } 
    } 
} 

希望這有助於任何有同樣問題的人! :)

+0

我幾乎忘記了這個問題。最終,這並不是一項嚴格的要求,我完全忽視了它。在你昨天發佈它之後,有時間測試它。非常感謝。 ;-) –

+1

您好,我前一段時間遇到了JSON問題,我做了大量的研究,直到我發現如何解析它,很高興我幫助了! :) – hardartcore

0

如果你有一個代表上面的「story_tags」範圍的JSONObject,你應該能夠通過各個標籤與迭代:

for (String key : storyTagsJSON.keys()) { 
    JSONObject tagJSON = storyTagsJSON.optJSONObject(key); 
    ... 
+0

你能解釋一下嗎?這會照顧變量嗎?示例中的** 19 **和** 0 ** –

+1

是的。除非我誤解了你的問題,在你給出的例子中,第一次通過循環時,鍵將是「19」。第二次通過鍵將是「0」。我錯過了內容是一個數組,所以我的第二行應該使用JSONArray/optJSONArray而不是JSONObject/optJSONObject。 – rightparen

+0

實際上並非如此。當我的意思是變量時,我的意思是** 19 **和** 0 **可以是任何事情。例如,他們甚至可以在一篇文章中說** 29 **,** 16 **和** 2 **。 'story_tags'下的標籤可以在帖子之間變化,因此它們在運行時無法計入。 –