【问题标题】:Parsing JSON ( again ) in iOS在 iOS 中解析 JSON(再次)
【发布时间】:2011-03-20 04:00:54
【问题描述】:

我只是在 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]);

但是不行……

编辑(aftet honcheng 的回答):

因为我想遍历“趋势”的结果,所以我在做:

NSDictionary *luckyNumbers = [responseString JSONValue];
NSArray *keys = [[luckyNumbers objectForKey:@"trends"] allKeys];

for (int i =0; i < [keys count]; i++) {

NSLog(@"%@", [keys objectAtIndex:i]);


    }

显然出了点问题,因为我没有得到任何结果..

【问题讨论】:

  • 这到底是什么 JSON 解析器? iOS SDK 中包含的 JSON 库是私有且未记录的,您不应该使用它。

标签: iphone json ios


【解决方案1】:

JSON 解析器通常返回原生的 NSObject,例如 NSDictionary 和 NSArray。解析后,您只需将其视为一个新对象。

[luckyNumbers allKeys] 返回一个 NSArray ["trends", "as_of"] [[luckyNumbers objectForKey:@"trends"] allKeys"] 返回一个 NSArray ["2011-03-13 11:42:17"]

由于 allKeys 返回一个 NSArray,因此您可以使用 for 循环来获取所有密钥。

【讨论】:

    猜你喜欢
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多