JSON не анализируется - PullRequest
       9

JSON не анализируется

0 голосов
/ 12 октября 2011

Я разрабатываю программу, используя GOogle Places API, и она имеет две функции: searchPlaces и loadPlaceDetails.

Функция loadPlaceDetails использует тот же код функции searchPlaces (адаптированный), но не возвращаетданные правильно.

Ниже приведен код функции loadPlaceDetails:

- (NSString *)loadPlaceDetails{

    NSString *myJson = [[NSString alloc] initWithContentsOfURL:
                           [NSURL URLWithString:@"https://maps.googleapis.com/maps/api/place/details/json?reference=CnRlAAAATXOCsnqUpz9GCU61PDw2GokDo2DTa_EWsUIDsfx5Fz5SF42iSarv-xE-smvnA6cY_kWbYIFte07Cu-_RsFvLewld_onmhaDvj_lsStNhoDzi_sTpOVhZywIH_8Y5YkrkudefaMF0J9vzUt_LfMzL2xIQXkCcDhJBwamOWFtvAXoAQRoUjwnYvrXeuYy6-ALt1enT1kRfDO4&sensor=true&key=AIzaSyBLY-lBALViJ6ybrgtOqQGhsCDQtsdKsnc"]];

    if ([myJson length] == 0) {
        [myJson release];
        return @"Error";
    }

    // Create a dictionary from the JSON string
    NSDictionary *results = [myJson JSONValue];

    NSArray *place = [results objectForKey:@"results"];

    placeDetailName = [[NSMutableString alloc] init];
    placeDetailAddress = [[NSString alloc] init];
    placeDetailLat = [[NSString alloc] init];
    placeDetailLng = [[NSString alloc] init];
    placeDetailUrl = [[NSString alloc] init];
    placeDetailPhone = [[NSString alloc] init];

    for (NSDictionary *element in place)
    {
        NSString *name = [element objectForKey:@"name"];
        [placeDetailName stringByAppendingFormat:@"%@",name];
        NSLog(@"Nome do estabelecimento: %@",placeDetailName);

        NSString *address = [element objectForKey:@"formatted_address"];
        [placeDetailAddress stringByAppendingFormat:@"%@",address];
        NSLog(@"%@",address);

        NSString *phone = [element objectForKey:@"formatted_phone_number"];
        [placeDetailPhone stringByAppendingFormat:@"%@",phone];
        NSLog(@"%@",phone);

        NSString *url = [element objectForKey:@"url"];
        [placeDetailUrl stringByAppendingFormat:@"%@",url];
        NSLog(@"%@",url);
    }

    for (NSDictionary *result in [results objectForKey:@"results"])
    {
        NSDictionary *location = [[result objectForKey:@"geometry"] objectForKey:@"location"];
        NSString *latitude = [[location objectForKey:@"lat"] stringValue];
        NSString *longitude = [[location objectForKey:@"lng"] stringValue];
        [placeDetailLat stringByAppendingFormat:@"%@",latitude];
        [placeDetailLng stringByAppendingFormat:@"%@",longitude];
    }

    NSString *basicurl = @"http://www.(...)/(...)/directions.html";
    NSString *funcao = @"loaddetailplace";
    NSMutableString *placesURL = [NSMutableString string];

    [placesURL appendString:[NSString stringWithFormat:@"%@?function=",basicurl]];
    [placesURL appendString:[NSString stringWithFormat:@"%@&latorigem=",funcao]];
    [placesURL appendString:[NSString stringWithFormat:@"%@&lngorigem=",placeDetailLat]];
    [placesURL appendString:[NSString stringWithFormat:@"%@",placeDetailLng]];

    return placesURL;

}

Когда я вызываю его где-нибудь в программе (того же класса), он возвращает http://www.(...) / (...) / directions.html? function = loaddetailplace & latorigem = & lngorigem = .

Не обрабатывает другие части функции.Я не знаю, что может происходить, и был бы благодарен, если бы кто-то помог мне!

Спасибо!

1 Ответ

1 голос
/ 12 октября 2011

Функция не соответствует возвращенному JSON.

В вашей функции у вас есть, например:

NSArray *place = [results objectForKey:@"results"];

В то время как первый уровень возвращаемого массива содержит что-то вроде:

"result": {
   "address_components": [],
   "formatted_address": "CRS 504 Bl B s/n lj 61 - Brasília - DF, 70331-525, Brasil",
   "formatted_phone_number": "(61) 3224-0625",
   "geometry": {},
   "icon": "http://maps.gstatic.com/mapfiles/place_api/icons/generic_business-71.png",
   "id": "6c85c1faf37814d6d6ca8bea9576cbb49eece4f5",
   "international_phone_number": "+55 61 3224-0625",
   "name": "Banco Itaú S/A",
   "reference": "CnRlAAAA73YR15TKnyhpZQrt7Cgi6QfWkgtZD5jXemeoAIjeoS52LwfkxcjikEJZu0gkmg0519e9NWh5fuuGjzgN_B1qO1e7RuaI1ZgbpB5eXpflLWS1jJXUfjDfIflVyn017XXI56KQf0Qxd15WSiXFXDQu9xIQQ2M0WexDH9WwBgw0IvPCXxoUihDOTi3Qrx8RNRhmVJgivqnoxng",
   "types": [],
   "url": "http://maps.google.com/maps/place?cid=944480254308386018",
   "vicinity": "CRS 504 Bl B s/n lj 61 - Brasília"
 }

На первом уровне у вас есть NSDictionary (не NSArray) 'результат' (не результаты). Я бы посоветовал просмотреть формат JSON, возвращаемый URL-адресом, который вы используете.

...