-1

在我的应用程序中,我正在使用 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];  

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

({  
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'
4

4 回答 4

1

您的回复是NSArray包含NSDictionary. 所以首先从数组中获取字典然后访问值。你json也看起来不正确。

for (NSDictionary *dict in responseArray) {
    double latitude = [dict[@"latitude"]doubleValue];
    double longitude = [dict[@"latitude"] longitude];
    NSString* name = dict[@"username"];
}
于 2014-01-02T09:57:22.307 回答
1

我认为您的问题是,它jsonParser objectWithString返回一个包含字典的数组,而不是字典本身。

尝试以下操作:

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

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

那对你有用吗 ?

于 2014-01-02T09:56:56.517 回答
1

1.首先你得到的是 JSON 格式的 NSArray

JSON以“(”开头表示NSArray

JSON以“{”开头表示NSDictionary

在这里,您将获得具有 NSDictionary 集合的 NSArray,

    {
        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
    }
    
于 2014-01-02T10:00:09.710 回答
0

在某些地方,您使用某些对象键从 nsarray 获取数据。该键对从数组中获取数据无效

于 2014-01-02T09:50:18.087 回答