Ios 从NSArray/NSDictionary中的空键获取值
我需要从json中取出值。我的json值如下所示:Ios 从NSArray/NSDictionary中的空键获取值,ios,objective-c,json,Ios,Objective C,Json,我需要从json中取出值。我的json值如下所示: [{"status":1,"data":[{"":558202}]}] 我尝试了几种在stackoverflow中发布的方法。但我仍然没有得到我的愿望 我最接近的结果是 ( 558202 ) 但我只需要558202。 我试过了 NSArray *jsonObject = [NSJSONSerialization JSONObjectWithData:[resultStr dataUsingEncoding:NSUTF8StringEnc
[{"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:@""];
当我使用上述方法时,我得到一个错误:
-[\uu NSArrayI objectForKey:]:未识别
键
数据的对象不是字典,而是包含一个字典的数组
事实上,错误消息确实告诉您这一点
--[__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
}
阅读完整的错误。您将NSArray
视为NSDictionary
。使用现代语法的强大功能,您只需执行以下操作:NSString*tempData=jsonObject[0][@“data”][0][@”“]代码>。但请注意,我说“可以”。不要。使用现代语法,但不要将4个访问链接在一起。调试是不可能的。@rmaddy这是真的。我没有这么做的两个原因。1.在现实生活中,您需要检查每一步接收的对象类型,因为JSON集合中的元素可以是任何合法的JSON类型(即,绝对没有链接)。2.我对现代语法不太熟悉,必须对其进行编译以确保正确无误,而且我很懒。@JeremyP从不使用someArray[0]
!如果你知道你正在访问第一个对象[someArray firstObject]
是一种更安全的方法。不,实际上最好在取出数组之前检查数组中是否有任何内容。谢谢@Jeremy。它成功了:)。正如我所知,由于将NSArray视为NSDictionary,我得到了一个错误,但我也提到,通过使用NSArray,我得到了小括号中的值:比如(23456)。所以我试着用字典法。不过,这两种方法都值得一试:)再次非常感谢杰里米