Android:解析未知的JSON标记

时间:2012-10-12 17:05:47

标签: android facebook-graph-api facebook-android-sdk

经过大量搜索后没有结果,我终于决定在这里提出这个问题了。

这是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 Graph API时的数据集是相同的。现在,我知道如何使用嵌套和所有来解析JSONObjects以及JSONArrays。但我对这类数据毫无头绪。示例中的 19 0 由嵌套的offset标记确定,并从发布到发布更改。如何解释未知的JSON标记和代码以获取其中的信息?

2 个答案:

答案 0 :(得分: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.
                }
            }
        }
    }
}

希望这有助于任何有同样问题的人! :)

答案 1 :(得分:0)

如果你有一个代表上面“story_tags”范围的JSONObject,你应该可以用以下代码遍历各个标签:

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