0

I am trying to get the JSON data I will be getting back from a forward geocoding web service API. The respond format is as follow.

  [
    {"total":63},{
        "t":"1",
        "lable":"Gek Poh Shopping Centre",
        "address":"762 Jurong West Street 75. (S)640762",
        "street":"Jurong West Street 75",
        "zip":"640762",
        "long":"103.6980151847",
        "lat":"1.348986165348",
        "x":"355149.0357","y":
        "149142.5301",
        "is_prem":"0",
        "pid":"47120",
        "aid":"115810",
        "lid":"245690",
        "has_biz":"1",
        "is_main_building":"1",
        "id":"245690",
        "cat_id":"80"
        },
        {
        "t":"1",
        "lable":"Gek Poh Ville Community Club (CC)",
        "address":"1 Jurong West Street 74. (S)649149",
        "street":"Jurong West Street 74",
        "zip":"649149",
        "long":"103.69890252806",
        "lat":"1.3489703630875",
        "x":"355247.7723",
        "y":"149140.7302",
        "is_prem":"0",
        "pid":"2979",
        "aid":"116734",
        "lid":"127311",
        "has_biz":"1",
        "is_main_building":"1",
        "id":"127311",
        "cat_id":"14"
        }
    ]

Here's what I did.

-(IBAction)search:(id) sender{
    self.requestString = [NSString stringWithFormat:@"http://www.streetdirectory.com/api/?mode=search&act=all&profile=sd_default&q=%@&show_additional=0&output=json&limit=1", textField.text];
    NSString *escapedString = [self.requestString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    self.request = [NSURLRequest requestWithURL:[NSURL URLWithString:escapedString]];

    responseData = [[NSMutableData alloc] init];
    rConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];

}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {

    [responseData appendData:data];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    SBJsonParser *parser = [[SBJsonParser alloc] init];
    NSDictionary *responseDict = [parser objectWithData:responseData];

    NSArray *resultsArray = [responseDict valueForKey:@""];   // am I doing it correctly to get the array?
    for (NSDictionary *childDic in resultsArray) {
        NSString *str = [childDic objectForKey:@"address"]; // for example I wanna get the address?
        label.text = str;
    }
}
Gavin
  • 2,784
  • 6
  • 41
  • 78

1 Answers1

2

You didn't say exactly what problem you are encountering, so I'll start by guessing based on what you did post.

It looks to me like your top level JSON object should be an array with 3 dictionaries within it:

NSArray *responseArray = [parser objectWithData:responseData];

The first dictionary in the array seems to be a dictionary with a single total value:

NSDictionary *totalDict = [responseArray objectAtIndex:0];
NSLog(@"Total: %@", [totalDict objectForKey:@"total"]);

The remaining dictionaries seem to have records that contain an address:

for (int i = 1; i < [responseArray count]; i++) {
    NSDictionary *dict = [responseArray objectAtIndex:i];
    NSLog(@"Address %d = %@", i, [dict objectForKey:@"address"]);
}
Tim Dean
  • 8,253
  • 2
  • 32
  • 59
  • Perfect. Can you suggest a way, whereby I will be able to get the number of addresses responded back to me? The "total" value does reflect the number of addresses the service had found, but not necessary returned back to me as I have imposed a limit. – Gavin Aug 26 '11 at 03:46
  • Assuming that each address returned is contained in one dictionary that follows the initial total dictionary, then the number of addresses returned to you should be [responseArray count] - 1. Basically its the number of entries in your top-level JSON array, minus one for the initial total entry. – Tim Dean Aug 26 '11 at 03:49
  • Thank you for your explanations. It was easy to follow for someone who is new like me. – Gavin Aug 26 '11 at 03:55