在 IOS 中解析 Twitter JSON 提要
Posted
技术标签:
【中文标题】在 IOS 中解析 Twitter JSON 提要【英文标题】:Parsing Twitter JSON feed in IOS 【发布时间】:2011-03-13 11:49:24 【问题描述】:我只是在 ios 中使用 JSON 解析器,它作为一个(简单)示例运行良好。但我想知道如何真正解析(有点)更复杂的东西,Twitter 趋势 JSON,像这样:
"trends":
"2011-03-13 11:42:17": [
"events": null,
"query": "Fukushima",
"promoted_content": null,
"name": "Fukushima"
,
"events": null,
"query": "Rebecca Black",
"promoted_content": null,
"name": "Rebecca Black"
,
"events": null,
"query": "Pearl Harbour",
"promoted_content": null,
"name": "Pearl Harbour"
,
...
"events": null,
"query": "Magdalena Neuner",
"promoted_content": null,
"name": "Magdalena Neuner"
]
,
"as_of": 1300016537
如何只返回前 3 个查询?在这种情况下:福岛、丽贝卡·布莱克和珍珠港。
使用示例代码,它是这样的:
for (int i = 0; i < [luckyNumbers count]; i++)
[text appendFormat:@"%@\n", [luckyNumbers objectAtIndex:i]];
虽然这是一个更简单的提要,但是否可以以相同的方式处理我正在寻找的内容?
编辑
我现在正在尝试返回“查询”的值:
所以我正在这样做:
NSLog(@"%@", [[luckyNumbers objectForKey:@"trends"]);
这当然会记录键“趋势”的内容,我如何不仅返回趋势的第一个(也是唯一的)键,还向下挖掘一个级别以返回“查询”的内容?
我也试过这样的:
NSString *date = [[[luckyNumbers valueForKeyPath:@"trends"] allKeys] description];
NSArray *trends = [luckyNumbers objectForKey:@"trends"];
NSLog(@"%@", [trends valueForKeyPath:date]);
但是不行……
【问题讨论】:
【参考方案1】:这取决于您使用的是哪个 JSON 解析器。
如果您使用document parser,您将获得字典和数组的NSDictionary
。 您需要了解文档结构才能提取所需信息。您可以使用任何常规机制(for
循环、枚举器、谓词等)
如果文档非常大,您可能需要像 yajl 这样的 SAX 样式解析器。您可以定义方法以在解析每种对象时使用它们。一旦你得到你正在寻找的东西(3 个查询或其他),你就会停止解析。 速度更快,消耗的内存更少。但它有点复杂。
【讨论】:
【参考方案2】:JSON 像 for like 那样映射到字典和数组——这就是它的重点(相对于 XML)。如何从特定 JSON 文件中获取信息取决于该文件最初的设计方式。
JSON 中的方括号表示数组 - 花括号表示字典(对象)。因此,在您的示例中,我们看到有一个字典包含一个带有键“趋势”的对象,一个本身就是字典的对象。
如果您记录已解析数组的输出,您将更容易掌握这一点,因为您将看到 NSArrays 和 NSDictionaries 的整个结构。要做到这一点,一旦你解析了你的 JSON,你会想要做这样的事情:
NSLog([parsedJsonResult description]);
【讨论】:
控制台给出了非常清晰的解析输出,这很有用,但是我如何从关键“趋势”中只返回字典? 好吧,假设您的解析器返回一个名为results
的字典对象,您会想要 [results objectForKey:@"trends"]
。
实际上在那个例子中我试图返回“查询”的值,我应该查看 objectForKey 吗?以上是关于在 IOS 中解析 Twitter JSON 提要的主要内容,如果未能解决你的问题,请参考以下文章
iOS 应用程序中的 Twitter 提要 - 我如何仅从我自己的帐户获取列表提要 [无需应用用户登录 Twitter]
使用 Asihttprequest 和 iPhone 的 Json 框架解析 JSON 数据