Iphone SBJson解析尝试——目标C
我正在尝试解析以下JSon(我想上次检查时已经验证过): 我尝试使用以下方法:Iphone SBJson解析尝试——目标C,iphone,objective-c,ios,ipad,sbjson,Iphone,Objective C,Ios,Ipad,Sbjson,我正在尝试解析以下JSon(我想上次检查时已经验证过): 我尝试使用以下方法: NSDictionary *myParsedJson = [myRawJson JSONValue]; for(id key in myParsedJson) { NSString *value = [myParsedJson objectForKey:key]; NSLog(value); } 错误: -[__NSArrayM length]: unrecognized selector sen
NSDictionary *myParsedJson = [myRawJson JSONValue];
for(id key in myParsedJson) {
NSString *value = [myParsedJson objectForKey:key];
NSLog(value);
}
错误:
-[__NSArrayM length]: unrecognized selector sent to instance 0x6bb7b40
问题:
在我看来,JSon值使myParsedJson对象成为NSArray而不是NSDictionary
如何遍历名为name_of_object的对象并访问每个嵌套字典?我这样做对吗?NSLog的第一个参数必须是字符串。试试这个:
NSLog(@"%@", value);
NSLog的第一个参数必须是字符串。试试这个:
NSLog(@"%@", value);
您的
值
不是字符串,因为您是这样键入的。
根据你发布的结构,你将有一个数组作为你的
顶级对象
NSDictionary *myParsedJson = [myRawJson JSONValue];
for(id key in myParsedJson) {
id value = [myParsedJson objectForKey:key];
NSLog(@"%@", value);
}
NSLog中的%@
语法导致-description
方法无效
呼唤价值;此方法返回一个NSString。这意味着
您可以执行NSLog([value description])代码>但这是
一般来说,这不是个好主意。(有人可能精心设计恶意输入,使你的应用程序崩溃。)你的值不是字符串,只是因为你输入了字符串。
根据你发布的结构,你将有一个数组作为你的
顶级对象
NSDictionary *myParsedJson = [myRawJson JSONValue];
for(id key in myParsedJson) {
id value = [myParsedJson objectForKey:key];
NSLog(@"%@", value);
}
NSLog中的%@
语法导致-description
方法无效
呼唤价值;此方法返回一个NSString。这意味着
您可以执行NSLog([value description])代码>但这是
一般来说,这不是个好主意。(有人可能会精心设计恶意输入,使你的应用程序崩溃。)Jesse已经给出了我认为正确的答案,我将发表标准的间接相关评论:由于iOS 5苹果提供了内置JSON解析器;您使用它可能有一个很好的理由,但不要期望SBJSON解析器将来会得到很好的支持;“我一点也不知道。”汤米,你怎么会这么想?我是SBJson的作者,无意停止支持它。@StigBrautset关于用法的简单推测;你会发现你的工作(虽然很好)不再有一个强大的用例,你现在的使用率会显著降低。当项目不再如此重要时,大多数作者会将他们的才华再投资于一个新项目。“你显然是一个有天赋的人,所以我的猜测是,你将更有可能专注于人们更可能使用的东西。”汤米承认,但现在它已经相当成熟,实际上不需要太多的努力来维护。此外,它还具有苹果解析器所不具备的功能,因此即使在iOS 5及以上版本上,它也有一席之地;您使用它可能有一个很好的理由,但不要期望SBJSON解析器将来会得到很好的支持;“我一点也不知道。”汤米,你怎么会这么想?我是SBJson的作者,无意停止支持它。@StigBrautset关于用法的简单推测;你会发现你的工作(虽然很好)不再有一个强大的用例,你现在的使用率会显著降低。当项目不再如此重要时,大多数作者会将他们的才华再投资于一个新项目。“你显然是一个有天赋的人,所以我的猜测是,你将更有可能专注于人们更可能使用的东西。”汤米承认,但现在它已经相当成熟,实际上不需要太多的努力来维护。此外,它还具有苹果的解析器所没有的功能,因此即使在iOS 5及更高版本上它也有一席之地。但它已经是一个字符串,因为value引用了nsstring对象?。。。。(运行它一段时间后…它实际工作)等等。。。为什么我需要将字符串转换为字符串?这不是转换。NSLog接受格式字符串,而不是字符串变量。另外,%@
也不表示“字符串”。它的意思是“对象”,只是为了澄清@Borrden的说法:在变量中保留格式字符串是完全正确的,但如果您试图打印您无法控制的数据,则不使用格式字符串是不安全的,因为有人可能会制作一个格式字符串,这会使您的应用程序崩溃。但它已经是一个字符串,因为值引用了nsstring对象?。。。。(运行它一段时间后…它实际工作)等等。。。为什么我需要将字符串转换为字符串?这不是转换。NSLog接受格式字符串,而不是字符串变量。另外,%@
也不表示“字符串”。它的意思是“object”,只是为了澄清@borrrden的说法:在变量中保留格式字符串是完全正确的,但如果您试图打印您无法控制的数据,则不使用格式字符串是不安全的,因为有人可能会设计一个格式字符串,从而使您的应用程序崩溃。