2012-10-12 92 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'下的标签可以在帖子之间变化,因此它们在运行时无法计入。 –