从NSArray / NSDictionary中的空键获取值

时间:2015-06-19 15:07:09

标签: ios objective-c json

我需要从json中取出值。我的json值是这样的:

[{"status":1,"data":[{"":558202}]}]

我尝试过在stackoverflow中发布的几种方法。但我仍然没有得到我的愿望。

我接近的最近结果是

(
558202
)

但我只需要558202。 我试过了

  NSArray *jsonObject = [NSJSONSerialization JSONObjectWithData:[resultStr dataUsingEncoding:NSUTF8StringEncoding]options:0 error:NULL];
  NSDictionary *tableData = [jsonObject valueForKey:@"data"];
  NSString *tempData=[tableData objectForKey:@""];

当我执行上述方法时,我收到错误:

  

- [__ NSArrayI objectForKey:]:无法识别

1 个答案:

答案 0 :(得分:3)

data的对象不是字典,它是包含一个字典的数组。

事实上,错误消息确实告诉了您。

--[__NSArrayI objectForKey:] : unrecognized
     ^^^^^^^^ is a subclass of NSArray

你真的需要

NSArray *jsonObject = [NSJSONSerialization JSONObjectWithData:[resultStr dataUsingEncoding:NSUTF8StringEncoding]options:0 error:NULL];
NSArray *tableData = [[jsonObject objectAtIndex: 0] objectForKey:@"data"];
NSString *tempData=[[tableData objectAtIndex: 0] objectForKey:@""];

NB valueForKey:处理数组的原因是,对于数组,它实际上将valueForKey:应用于数组中的每个元素,并返回一个包含所有结果的数组。

修改

上面的代码可以写成

NSString *tempData = jsonObject[0][@"data"][0][@""];

使用现代语法。但正如rmaddy在下面所说,不要链接这样的东西,因为JSON集合中的元素可以是任何JSON兼容类型,所以在现实生活中你必须检查你得到的对象类型。

id jsonObject = [NSJSONSerialization JSONObjectWithData:[resultStr dataUsingEncoding:NSUTF8StringEncoding]options:0 error:NULL];

if ([jsonObject isKindOfClass: [NSArray class]])
{
    id firstElement = jsonObject[0];      
    if ([firstElement isKindOfClass: [NSDictionary class]])
    {
        id data = firstElement[@"data"];

    // etc
    }
}
else
{
    // errror
}