iOS-error in parsing the data

2019-09-20 12:19发布

问题:

In my app, I am parsing the data using JSON

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];  

After this code executes, In my log it is printed as

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

But while running, the app crashes, as

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

回答1:

I think your problem is, that jsonParser objectWithString returns an array with dictionaries in it not dictionaries itself.

Try the following:

NSArray *jsonData = (NSArray *) [jsonParser objectWithString:outputData error:nil];

for(NSDictionary *dict in jsonData) {
    NSLog(@"%@",dict);
}

Does that work for you ?



回答2:

Your reponse is NSArray which contains NSDictionary. So frst get dictionary from array then access value. Also Your json not look like correct.

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


回答3:

1. First of all you are getting NSArray in JSON

JSON Starts with "(" means NSArray

JSON Starts with "{" means NSDictionary

Here you are getting NSArray which has collection of NSDictionary,

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

2."success" key is not present in the JSON..

  • Fix

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


回答4:

some where you are getting data from nsarray with using some object key. that key is invalid to fetching data from array