在 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 数据

使用json/jquery获取twitter提要

使用 Tweepy 搜索 Twitter 提要

Twitter RSS提要解析器,用于在网站上显示tweet(包括缓存)

当字典在iOS中没有标题时如何解析JSON?