格式化JSON收到的字符串

时间:2015-03-07 23:25:01

标签: ios json

在我的应用程序中,我需要解析从远程服务器接收的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=%@&current_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];
                                       }


                                   }
                               }
                           }];
}

1 个答案:

答案 0 :(得分:1)

嗯,那是因为它不是一个字符串......它是带有字符串的数组(你在日志中看到的括号是数组desciption的一部分),所以我想你可以抓住

[[value valueForKey:@"current_latitude"] firstObject]

如果你肯定这是你从后端得到的。我希望这是有道理的