在我的应用程序中,我需要解析从远程服务器接收的JSON对象,而不是由我管理。 我的应用程序从服务器获取的是一个JSON字符串,我将其转换为NSDictionary。然后我试图检索一些JSON对象的值。 此时我面临以下问题: 我将以密钥" current_latitude的值为例:我正在检索。
如果我使用检索到的字符串创建一个NSLog,我会在控制台上看到它:
VALUE=(
"-12.19061989"
)
显然,当我尝试将此字符串转换为double时,应用程序崩溃。
这是到目前为止的代码:
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:objectData
options:NSJSONReadingMutableContainers
error:&jsonError];
for (NSString* key in json) {
id value = [json objectForKey:key];
NSLog(@"VALUE=%@",[value valueForKey:@"current_latitude"]);
NSLog(@"VALUE=%@",[value valueForKey:@"current_longitude"]);
}
我该怎么做才能获得正常的字符串?
谢谢
EDITED
这是发出JSON请求的完整代码:
// request para descargar la posicion de los vehiculos disponibles
NSString *latitud = self.deviceLat;
NSString *longitud = self.deviceLon;
NSLog (@"latitud actual =%@",latitud);
NSLog (@"longitud actual =%@",longitud);
NSURL *apiURL = [NSURL URLWithString:
[NSString stringWithFormat:@"http://hidden here/?current_latitude=%@¤t_longitude=%@", latitud,longitud]];
NSURLRequest *request = [NSURLRequest requestWithURL:apiURL]; // this is using GET, for POST examples see the other answers here on this page
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
if(data.length) {
NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
if(responseString && responseString.length) {
NSLog(@"dATOS RECIBIDOS=%@", responseString);
NSError *jsonError;
NSData *objectData = [responseString dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:objectData
options:NSJSONReadingMutableContainers
error:&jsonError];
for (NSString* key in json) {
id value = [json objectForKey:key];
// do stuff
NSLog(@"VALUE=%@",[value valueForKey:@"current_latitude"]);
NSLog(@"VALUE=%@",[value valueForKey:@"current_longitude"]);
//ponemos en el punto deseado un marcador de tipo PinDisponible
NSString *latstring = [value valueForKey:@"current_latitude"];
NSString *lonstring = [value valueForKey:@"current_longitude"];
NSLog(@"LATITUD=%@", latstring);
NSLog(@"LONGITUD=%@", lonstring);
//double latdouble = [latstring doubleValue];
//double londouble = [lonstring doubleValue];
//NSLog(@"latdouble: %f", latdouble);
//NSLog(@"londouble: %f", londouble);
//CLLocationCoordinate2D vehiculo = [mapView centerCoordinate];
//vehiculo.latitude = latdouble;
//vehiculo.longitude = londouble;
//PinDisponible *vehiculoDisponible = [[PinDisponible alloc] initWithTitle:@"Vehiculo disponible" location:vehiculo];
// [self.mapView addAnnotation:vehiculoDisponible];
}
}
}
}];
}
答案 0 :(得分:1)
嗯,那是因为它不是一个字符串......它是带有字符串的数组(你在日志中看到的括号是数组desciption
的一部分),所以我想你可以抓住
[[value valueForKey:@"current_latitude"] firstObject]
如果你肯定这是你从后端得到的。我希望这是有道理的