-2

我在解析这个 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'
4

3 回答 3

2

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

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

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

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

于 2012-12-23T15:23:48.260 回答
1

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

于 2012-12-23T15:02:37.557 回答
0

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

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

于 2012-12-23T15:02:19.010 回答