JSON не анализируется
Я разрабатываю программу с использованием 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 ответ
Функция не соответствует возвращенному 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-адресом, который вы используете.