Objective-C: как читать JSON в JSON?

#objective-c #ios #json

#objective-c #iOS #json

Вопрос:

У меня был такой JSON:

  {
       "destination_addresses" : [ "Dimitrov, Phnom Penh, Cambodia" ],
       "origin_addresses" : [ "Tchecoslovaquie, Phnom Penh, Cambodia" ],
       "rows" : [
          {
             "elements" : [
                {
                   "distance" : {
                      "text" : "0.6 km",
                      "value" : 594
                   },
                   "duration" : {
                      "text" : "2 mins",
                      "value" : 100
                   },
                   "status" : "OK"
                }
             ]
          }
       ],
       "status" : "OK"
    }
  

Вот мой код:

 SBJsonParser *parser = [[SBJsonParser alloc] init]; 
NSDictionary *data = (NSDictionary *) [parser objectWithString:apiResponse error:nil]; 
NSLog(@"Data = %@",data);

// getting the data from inside of "rows"  
NSDictionary *rows = (NSDictionary *) [data objectForKey:@"rows"];  
NSLog(@"Row = %@",rows);

NSDictionary *element = (NSDictionary *) [rows objectForKey:@"elements"];
NSLog(@"elements = %@",element);

NSDictionary *distance = (NSDictionary *) [rows objectForKey:@"distances"];
NSLog(@"Distance = %@",distance);
  

Но получил ошибку:

-[__NSArrayM objectForKey:]: нераспознанный селектор, отправленный экземпляру 0x5a9afa0 с помощью NSDictionary *element = (NSDictionary *) [строки objectForKey:@»элементы»];

Я хочу получить значение в ключе расстояния!

Ответ №1:

Если вы внимательно наблюдаете, rows это словарь внутри массива.

 "rows" : [
          {
             "elements" : [
                {
                   "distance" : {
                      "text" : "0.6 km",
                      "value" : 594
                   },
                   "duration" : {
                      "text" : "2 mins",
                      "value" : 100
                   },
                   "status" : "OK"
                }
             ]
          }
       ]
  

Итак, вам нужно сделать

 NSArray *rows          = [data objectForKey:@"rows"];  
NSDictionary *rowsDict = [rows objectAtIndex:0];

NSArray *element = [rowsDict objectForKey:@"elements"];
NSLog(@"elements = %@",element);

NSDictionary *distance = [[element objectAtIndex:0] objectForKey:@"distances"];
NSLog(@"distance= %@", distance);
  

И так далее и тому подобное.

 NSLog(@"Distance = %@",distance);