我应该如何读取jsonstring的数据? 苹果手机

我有一个NSString "[{"van" : 1,312, "vuan":12,123}] ,为了得到每个键的这个值,我这样做:

  NSData *data1 = [jsonResponse1 dataUsingEncoding:NSUTF8StringEncoding]; jsonArray = [NSJSONSerialization JSONObjectWithData:data1 options:kNilOptions error:&err]; self.van = [NSMutableArray arrayWithCapacity:1]; self.vuan = [NSMutableArray arrayWithCapacity:1]; for (NSDictionary *json in jsonArray) { NSString * value = [json objectForKey:@"van"]; [self.van addObject:value]; lbl1.text = value; NSString * value1 = [json objectForKey:@"vuan"]; [self.vuan addObject:value1]; lbl4.text = value1; } 

可能是我不必使用数组,而是直接在NSDictionary转换NSData

无论如何,我不明白为什么jsonArraynil ,虽然jsonResponse1包含我写上面的值。

编辑:我的老板写了错误的JSONstring。 谢谢大家的build议!:)

你的JSON是无效的。 修理它。 这个网站是你的朋友。

http://jsonlint.com/

你需要更多的防守代码,你需要报告错误,因为他们被发现。

首先检查JSONparsing是否失败,如果是,则报告错误:

  NSData *data1 = [jsonResponse1 dataUsingEncoding:NSUTF8StringEncoding]; jsonArray = [NSJSONSerialization JSONObjectWithData:data1 options:kNilOptions error:&err]; if (jsonArray == nil) { NSLog(@"Failed to parse JSON: %@", [err localizedDescription]); return; } 

其次,如果这些键不在JSON中, objectForKey:将返回nil ,当您尝试将其添加到数组中时,将引发exception,这是您要避免的:

 for (NSDictionary *json in jsonArray) { NSString * value = [json objectForKey:@"van"]; if (value != nil) { [self.van addObject:value]; lbl1.text = value; } else { NSLog(@"No 'van' key in JSON"); } NSString * value1 = [json objectForKey:@"vuan"]; if (value1 != nil) { [self.vuan addObject:value1]; lbl4.text = value1; } else { NSLog(@"No 'vuan' key in JSON"); } } 

所以总结:运行时错误会发生,所以你需要确保你处理它们。 当它们发生时,您需要尽可能多地报告信息,以便您可以诊断并修复它们。