iOS-error in parsing the data

2019-09-20 12:20发布

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'

4条回答
贼婆χ
2楼-- · 2019-09-20 12:29

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楼-- · 2019-09-20 12:30

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楼-- · 2019-09-20 12:37

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 ?

查看更多
SAY GOODBYE
5楼-- · 2019-09-20 12:43

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

查看更多
登录 后发表回答