在parsing数据时发生iOS错误

在我的应用程序中,我使用JSONparsing数据

NSString * urlString=[NSString stringWithFormat:@"http://userRequest?userid=bala@gmail.com&latitude=59.34324&longitude=23.359257"]; NSURL * url=[NSURL URLWithString:urlString]; NSMutableURLRequest * request=[NSMutableURLRequest requestWithURL:url]; NSError * error; NSURLResponse * response; NSData *data=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; NSString * outputData=[[NSString alloc]initWithData:data encoding:NSASCIIStringEncoding]; NSLog(@"%@",outputData); SBJsonParser *jsonParser = [SBJsonParser new]; NSDictionary *jsonData = (NSDictionary *) [jsonParser objectWithString:outputData error:nil]; NSLog(@"%@",jsonData); NSInteger success = [(NSNumber *) [jsonData objectForKey:@"success"] integerValue]; 

这段代码执行后,在我的日志中打印为

 ({ latitude = "0.000000000000000"; longitude = "0.000000000000000"; username = sunil; }, { latitude = "80.000000000000000"; longitude = "30.000000000000000"; username = arun; }) 

但是,运行时,应用程序崩溃,如

 'NSInvalidArgumentException', reason: '-[__NSArrayM objectForKey:]: unrecognized selector sent to instance 0x910d8d0' 

我认为你的问题是,该jsonParser objectWithString返回一个数组与字典本身不是字典本身。

尝试以下操作:

 NSArray *jsonData = (NSArray *) [jsonParser objectWithString:outputData error:nil]; for(NSDictionary *dict in jsonData) { NSLog(@"%@",dict); } 

那对你有用吗 ?

你的响应是包含NSDictionary NSArray 。 所以先从数组中获取字典然后访问值。 另外你的json看起来不正确。

 for (NSDictionary *dict in responseArray) { double latitude = [dict[@"latitude"]doubleValue]; double longitude = [dict[@"latitude"] longitude]; NSString* name = dict[@"username"]; } 

1.首先你得到JSON中的NSArray

JSON以“(”表示NSArray

JSON以“{”表示NSDictionary开头

在这里你得到NSArray其中有NSDictionary的集合,

  { latitude = "0.000000000000000"; longitude = "0.000000000000000"; username = sunil; },... 

2.“成功”键不存在于JSON中。

  • 固定

     NSArray *jsonData = (NSArray *) [jsonParser objectWithString:outputData error:nil]; If([jsonData count]>0){ // Has some data // Iterate NSDictionary and get data here } else{ // No Data } 

一些你使用某个对象键从nsarray获取数据的地方。 该键对从数组中提取数据无效

Interesting Posts