【问题标题】:Parse this JSON [closed]解析这个 JSON [关闭]
【发布时间】:2012-12-23 14:54:32
【问题描述】:

我在解析这个 JSON 时遇到了一个小问题

    {
    "@attributes": {
        "date": "23-12-2012"
    },

    "data": [

        {
        "ft_link": "google",
        "title": "CEO"

        },
        {
        "ft_link": "Yahoo",
        "title": "CEO"
        }
     ]
}

我试图获取所有“标题”项目。

NSError *jsonError = nil;
id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:&jsonError];


NSDictionary *jsonDictionary = (NSDictionary *)jsonObject;
NSLog(@"%@", [jsonDictionary objectForKey:@"data"]);

这会记录整个 JSON。但现在我想解析所有“标题”项目。所以我尝试了:

NSLog(@"%@", [jsonDictionary objectForKey:@"data"] objectForKey:@"title"]);

然后它崩溃了,我怎样才能正确解析它?

崩溃:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFArray objectForKey:]: unrecognized selector sent to instance 0x91583c0'

【问题讨论】:

标签: objective-c xcode json ios5


【解决方案1】:

如前所述,objectForKey 不适用于 NSArray。但是 NSArrays 确实实现了valueForKey,你可以用它来得到你想要的,`,即:

[jsonDictionary objectForKey:@"data"] valueForKey:@"title"]

这将返回一个包含标题的字符串数组。

objectForKey 调用将返回数组,而对数组调用 valueForKey 会通过对每个对象调用 valueForKey 来返回一个对象数组。

【讨论】:

    【解决方案2】:

    数据是一个array(字典),所以它不支持objectForKey:。它崩溃的错误可能表明了这一点。在尝试对其进行处理之前,您还应该始终检查 json 解析返回的任何错误。

    【讨论】:

      【解决方案3】:

      我不确定这是否是有效的 JSON。

      但根据您的要求,您希望获取“title”的所有值。而且我看到有多个“标题”,因此您需要将其分解为NSArray,然后通过objectForKey:@"title" 访问嵌套的NSDictinary

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-09
        • 2012-05-01
        • 2021-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多