I'm having a problem on parsing a JSON from Google Places.
I have the following code for parsing it:
NSString *myRawJson = [[NSString alloc] initWithContentsOfURL:[NSURL URLWithString:@"https://maps.googleapis.com/maps/api/place/search/json?location=-15.815347,-47.9164097&radius=500&types=bank&sensor=true&key=AIzaSyBLY-lBALViJ6ybrgtOqQGhsCDQtsdKsnc"]];
if ([myRawJson length] == 0) {
[myRawJson release];
return;
}
SBJSON *parser = [[SBJSON alloc] init];
list = [[parser objectWithString:myRawJson error:nil] copy];
NSDictionary *results = [myRawJson JSONValue];
placesLatitudes = [[NSMutableArray alloc] init];
NSDictionary *latslngs = [[results objectForKey:@"results"] valueForKey:@"location"];
NSArray *teste = [latslngs objectForKey:@"location"];
for (NSDictionary *element in teste)
{
NSString *latitude = [element objectForKey:@"lat"];
NSLog(@"%@", latitude);
}
[parser release];
The URL request returns the following JSON:
{
"html_attributions" : [ "Listagens por \u003ca href=\"http://www.telelistas.net/\"\u003eTelelistas\u003c/a\u003e" ],
"results" : [
{
"geometry" : {
"location" : {
"lat" : -15.8192680,
"lng" : -47.9146680
}
},
"icon" : "http://maps.gstatic.com/mapfiles/place_api/icons/generic_business-71.png",
"id" : "1a01f2887f1a70bd430d6a7ffa2a7e46974a1cb7",
"name" : "Banco Bradesco S/A",
"reference" : "CnRqAAAAXr_6FCDMlpeVF-E0b3cDxNFGzmS1bYBBGc4v4lKrcusGQPEnx1MXnCJVb3nCVWalu2IOwN9oSVtcXS6_W8JLL_CMhKzkm75UqGt5ShX_s0d4coxOBYsbo66JP1NpF9c5Ua7OxyjepQferD6SbAIjIhIQZ6qcgQT8hqAXtFTuPzuZThoUhrCcxKMRwZq2vl8Sv8LJes7d-no",
"types" : [ "bank", "finance", "establishment" ],
"vicinity" : "CRS 511 Bl B s/n lj 15/21 - Brasília"
},
{
"geometry" : {
"location" : {
开发者_运维问答 "lat" : -15.8177890,
"lng" : -47.9126370
}
},
"icon" : "http://maps.gstatic.com/mapfiles/place_api/icons/generic_business-71.png",
"id" : "e2c56c8ca6643e0f0cef6bd0405fd8c6a30850ad",
"name" : "UNIBANCO-União de Bancos Brasileiros S/A",
"reference" : "CpQBgQAAABkp74S1WF0LfZEhkNj6TUbmiPu2djL81IDnFMJhRR2HDx7336PlRh46q16FwCao290T1smo1wNsGQ-sRVZ_S-MClYUDQzdpaTdNVty0JHBjQTEOMVo0yW8Uzd_OcuI12v8eZ81wu5V7sgHomBw-SeE-mhrPntOU1EzmOANNhIDRExdKmrof2hIKHdLJJaccdRIQeQ9uN-L66Ztmz4_2dkk7DhoUZxcYaZqXgXXnAwWB97e6bNCNp8A",
"types" : [ "bank", "finance", "establishment" ],
"vicinity" : "Bl CRS 510 Bl A s/n - Brasília"
}
],
"status" : "OK"
}
I'm trying to get the information in the path results > geometry > location > lat but I with the code above I get the error: -[__NSArrayI objectForKey:]: unrecognized selector sent to instance 0x5a526e0.
Someone know how to parse this data using JSON Framework for iOS? Thanks!
results is an array, not a dictionary. location is a dictionary, not an array.
NSDictionary *results = [myRawJson JSONValue];
foreach (NSDictionary *result in [results objectForKey:@"results"])
{
NSDictionary *location = [[result objectForKey:@"geometry"] objectForKey:@"location"];
NSString *latitude = [location objectForKey:@"lat"];
NSString *longitude = [location objectForKey:@"lng"];
}
I did not test compile that code, but it should be close.
Here Parse Data From Google Map API
-(NSString *)getAddressFromLatLon:(double)pdblLatitude withLongitude:(double)pdblLongitude
{
NSString *urlString = [NSString stringWithFormat:@"http://maps.googleapis.com/maps/api/geocode/json?latlng=%f,%f&sensor=true",pdblLatitude, pdblLongitude];
NSError* error;
NSString *locationString = [NSString stringWithContentsOfURL:[NSURL URLWithString:urlString] encoding:NSASCIIStringEncoding error:&error];
// NSLog(@"%@",locationString);
locationString = [locationString stringByReplacingOccurrencesOfString:@"\"" withString:@""];
NSURL *requestURL = [NSURL URLWithString:urlString];
NSURLRequest *request = [NSURLRequest requestWithURL:(requestURL)];
//response
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSError *jsonParsingError = nil;
NSDictionary *locationResults = [NSJSONSerialization JSONObjectWithData:response options:0 error:&jsonParsingError];
if ([locationResults count]==0) {
[AQHelper showAlert:self withTitle:@"Empty Location" withMessage:@"Location Not Found!"];
return nil;
}
else{
NSString *fullAddress = [[[locationResults objectForKey:@"results"] objectAtIndex:0] objectForKey:@"formatted_address"]
;
self.address=fullAddress;
id allValues = [NSJSONSerialization JSONObjectWithData:response options:0 error:&jsonParsingError];
NSArray *result = [(NSDictionary*)allValues objectForKey:@"results"];
// for(int i=0;i<[result count];i++)
// {
NSDictionary *values = (NSDictionary*)[result objectAtIndex:0];
NSArray *component = [(NSDictionary*)values objectForKey:@"address_components"];
for(int j=0;j<[component count];j++)
{
NSDictionary *parts = (NSDictionary*)[component objectAtIndex:j];
if([[parts objectForKey:@"types"] containsObject:@"route"])
{
if ([parts objectForKey:@"long_name"]!=0) {
self.street=[parts objectForKey:@"long_name"];
}
else{
self.street=[parts objectForKey:@"short_name"];
}
}
if([[parts objectForKey:@"types"] containsObject:@"locality"])
{
if ([parts objectForKey:@"long_name"]!=0) {
self.city=[parts objectForKey:@"long_name"];
}
else{
self.city=[parts objectForKey:@"short_name"];
}
}
if([[parts objectForKey:@"types"] containsObject:@"administrative_area_level_2"])
{
if ([parts objectForKey:@"long_name"]!=0) {
self.state=[parts objectForKey:@"long_name"];
}
else{
self.state=[parts objectForKey:@"short_name"];
}
}
if([[parts objectForKey:@"types"] containsObject:@"postal_code"])
{
if ([parts objectForKey:@"long_name"]!=0) {
self.zip=[parts objectForKey:@"long_name"];
}
else{
self.zip=[parts objectForKey:@"short_name"];
}
}
}
}
return self.address;
}
精彩评论