0

我正在尝试解析一些json,到目前为止我有:

 NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
    NSDictionary *results = [json objectForKey:@"d"];

    NSString *error = [results objectForKey:@"error"];
    NSArray *items = [results objectForKey:@"vehicles"];
  NSLog(@"items::%@", items);
    for (NSDictionary *item in items) {
        IDCard *idcard = [[IDCard alloc] init];
        idcard.year = [item objectForKey:@"year"];
        idcard.make = [item objectForKey:@"make"];
        idcard.model = [item objectForKey:@"model"];

项目的 nslog 是这样的:

items::(
        (
                {
            make = CHEV;
            model = MALIBU;
            year = 2002;
        },
                {

            make = GMC;
            model = SIERRA1500;
            year = 1995;
        }
    )
)

它很好,直到它到达idcard.year = [item objectForKey:@"year"]; 并且它崩溃了Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFArray objectForKey:]: unrecognized selector sent to instance 0x9fdea80' ,我不明白它为什么这样做。

如果发布完整的 json 有帮助,请告诉我,我会的。谢谢你能给我的任何帮助。

4

4 回答 4

1

@akashivskyy 是对的。您在数组中有一个(看似多余的)数组(例如,items 数组所在的空容器数组)。您可能需要稍微修改一下 JSON?但是,如果您只是想避免 NSInvalidArgumentException,以下应该可以解决问题 - 而不是

NSArray *items = [results objectForKey:@"vehicles"];

尝试这个:

NSArray *items = [[results objectForKey:@"vehicles"] objectAtIndex:0];
于 2013-10-21T20:39:18.710 回答
0

如果您查看输出的 json,您会发现字典存储在一个数组中。

包含所有字典的数组存储在另一个长度为 1 的数组中。

替换了这一行:

for (NSDictionary *item in items) {

用这条线:

for (NSDictionary *item in [items objectAtIndex:0]) {
于 2013-10-21T20:40:45.133 回答
0

它看起来像 items 是 Array 并且包含字典数组,因此如果您对 NSArray 执行操作 objectForKey 将崩溃并显示错误消息“无法识别的选择器”

尝试这个。

NSArray items1 =[items objectAtIndex:0];
for (NSDictionary *item in items1) {
    IDCard *idcard = [[IDCard alloc] init];
    idcard.year = [item objectForKey:@"year"];
    idcard.make = [item objectForKey:@"make"];
    idcard.model = [item objectForKey:@"model"];
 }

如果上述解决方案不起作用,请在此处粘贴您的 JSON 字符串

于 2013-10-21T20:41:10.040 回答
0

常见的陷阱可能arrayWithObjects改用arrayWithArray

于 2015-08-22T13:30:42.827 回答