【问题标题】:Parsing Twitter JSON feed in IOS在 IOS 中解析 Twitter JSON 提要
【发布时间】: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]);

但是不行……

【问题讨论】:

    标签: iphone json ios


    【解决方案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 吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-09
      • 1970-01-01
      • 1970-01-01
      • 2014-06-18
      • 2012-04-02
      • 2015-10-23
      • 2011-09-18
      相关资源
      最近更新 更多