Android:解析未知的JSON标签
在搜索了很多没有结果之后,我最终决定在这里提出这个问题。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标签和代码以获取其中的信息?
据我所知,你的问题是你不知道如何获取密钥,这些密钥是根据帖子或其他内容动态生成的(例如,在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.
}
}
}
}
}
希望这有助于任何有同样问题的人! :)
如果你有一个代表上面的“story_tags”范围的JSONObject,你应该能够通过各个标签与迭代:
for (String key : storyTagsJSON.keys()) {
JSONObject tagJSON = storyTagsJSON.optJSONObject(key);
...
你能解释一下吗?这会照顾变量吗?示例中的** 19 **和** 0 ** –
是的。除非我误解了你的问题,在你给出的例子中,第一次通过循环时,键将是“19”。第二次通过键将是“0”。我错过了内容是一个数组,所以我的第二行应该使用JSONArray/optJSONArray而不是JSONObject/optJSONObject。 – rightparen
实际上并非如此。当我的意思是变量时,我的意思是** 19 **和** 0 **可以是任何事情。例如,他们甚至可以在一篇文章中说** 29 **,** 16 **和** 2 **。 'story_tags'下的标签可以在帖子之间变化,因此它们在运行时无法计入。 –
我几乎忘记了这个问题。最终,这并不是一项严格的要求,我完全忽视了它。在你昨天发布它之后,有时间测试它。非常感谢。 ;-) –
您好,我前一段时间遇到了JSON问题,我做了大量的研究,直到我发现如何解析它,很高兴我帮助了! :) – hardartcore