iosjsonjson-framework

Error on JSON framework parsing


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!


Solution

  • 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.