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= 。
它不处理函数的其他部分。我不知道会发生什么,如果有人帮助我,我将不胜感激!
谢谢!
I'm developing a program using GOogle Places API and it has two functions: searchPlaces and loadPlaceDetails.
The function loadPlaceDetails is using the same code of the searchPlaces function (adapted) but it is not returning the data correctly.
Below, is the code of the loadPlaceDetails function:
- (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;
}
When I call it somewhere in the program (same class), it returns http://www.(...)/(...)/directions.html?function=loaddetailplace&latorigem=&lngorigem=.
It is not processing the other parts of the function. I don't know what may be happening and would be grateful if someone helped me!
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
该函数与返回的 JSON 不匹配。
例如,在您的函数中,您有:
虽然返回数组的第一级包含类似内容:
在第一级中,您有一个 NSDictionary (不是 NSArray)“结果”(不是结果)。我建议检查您正在使用的 URL 返回的 JSON 格式。
The function is not matching the returned JSON.
In your function, you have, for example:
While the first level of the returned array contains something like:
In the first level, you have a NSDictionary (not a NSArray) 'result' (not results). I would suggest to review the JSON format returned by the URL the you are using.