2014-10-07 2 views
-1

я получил ответ JSON выглядеть (ниже добавлено):Как получить конкретные значения от вложенного ответа JSON?

response : { 

    A = { 
      latitude = "0"; 
      longitude = "0"; 

      }; 

    B = { 
      latitude = "0"; 
      longitude = "0"; 

      }; 
} 

Мне нужно, чтобы получить A, B, C, .. значения широты, тоскует. и хранить в один массив. Здесь я могу получить метод valueforkey :@"A", но я не знаю, что первый объект ответа может быть 1, 2, 3 независимо. Пожалуйста, дайте мне одно хорошее решение этой проблемы.

Спасибо, Аджай

+0

Ну, сначала получите некоторый действительный JSON - в приведенном выше примере отсутствует '{', по крайней мере. Затем перейдите на json.org, чтобы узнать синтаксис JSON. Затем проанализируйте JSON с помощью NSJSONSerialization (что, по-видимому, вы уже сделали, поскольку выше это NSLog словаря (отсутствует открытие «{')), затем обращается к возвращенному словарю для получения« ответа », возвращая словарь. Теперь вы можете получить доступ к словарям «A» и «B» и входам «широта» и «долгота». NSLog на каждом шаге, чтобы понять, что у вас есть. –

ответ

0

Попробуйте

NSArray *firstLevelValues = [response allValues]; 
NSArray *lats = [firstLevelValues valueForKey:@"latitude"]; 
NSArray *longs = [firstLevelValues valueForKey:@"longitude"]; 
+0

Отлично Спасибо! – Ajay

0

NSDictionary есть 2 метода allKeys и allValues. Так что если вы хотите, чтобы получить все ключи в ответ использования объекта следующий синтаксис:

NSArray *allKeys = [dict valueForKey:@"response"]; 

Если вы хотите, чтобы получить значение широты и долготы затем перебрать AllKeys в течение цикла.

NSDictionary *dict = @{@"response":@{@"A":@{@"latitude":@"0",@"longitude":@"0"}, 
            @"B":@{@"latitude":@"1",@"longitude":@"1"}}}; 

NSDictionary *response = [dict valueForKey:@"response"]; 
NSArray *allKeys = [dict valueForKey:@"response"]; 

for (NSString *keyName in allKeys) { 
    NSLog(@"%@",[response objectForKey:keyName]); 
    NSString *latitude = [[response objectForKey:keyName] objectForKey:@"latitude"]; 
    NSString *longitude = [[response objectForKey:keyName] objectForKey:@"longitude"]; 

} 
+0

Отличный ответ! спасибо ... – Ajay

+0

В цикле вы должны сначала установить 'NSDictionary * letterDict = response [keyName];', а затем использовать 'letterDict' в последующих строках. Это не столько «оптимизировать», сколько обеспечить возможность отладки в случае необходимости (и сократить ваши заявления, чтобы их легче было «grok»). –

+0

@HotLicks Yup вы можете сделать это тоже. Я этого не делал, потому что он имеет только 2 значения. Вы также можете использовать 'objectForKeyPath', если в JSON есть более высокий уровень – milanpanchal

Смежные вопросы