我需要从 json 中取出值。我的 json 值如下所示:
[{"status":1,"data":[{"":558202}]}]
我已经尝试了几种发布在堆栈溢出中的方法。但我仍然没有让我的愿望得到回报。
我接近的结果是得到
(
558202
)
但我只需要558202。我试过了
NSArray *jsonObject = [NSJSONSerialization JSONObjectWithData:[resultStr dataUsingEncoding:NSUTF8StringEncoding]options:0 error:NULL];
NSDictionary *tableData = [jsonObject valueForKey:@"data"];
NSString *tempData=[tableData objectForKey:@""];
当我执行上述方法时,出现错误:
-[__NSArrayI对象键:]:无法识别
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:@""];
注意: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
}