2013-06-03 2 views
0

Мне нужно разобрать файл JSON, предоставленный Google Maps API Затем я использую AFNetworkingRequestHow, чтобы получить ответ JSON. Я построил этот словарь:Как разбирать многоадресную рассылку JSON

NSDictionary *jsonDict = (NSDictionary *) JSON; 
    NSArray *rows = [jsonDict objectForKey:@"rows"]; 

Но теперь, как я могу достичь первого значения поля длительности тега?

JSON файла для разбора:

{ 
"destination_addresses" : [ "San Francisco, CA, USA", "Victoria, BC, Canada" ], 
"origin_addresses" : [ "Vancouver, BC, Canada", "Seattle, WA, USA" ], 
"rows" : [ 
    { 
     "elements" : [ 
     { 
      "distance" : { 
       "text" : "1,527 km", 
       "value" : 1527251 
      }, 
      "duration" : { 
       "text" : "15 hours 0 mins", 
       "value" : 54010 
      }, 
      "status" : "OK" 
     }, 
     { 
      "distance" : { 
       "text" : "112 km", 
       "value" : 111906 
      }, 
      "duration" : { 
       "text" : "3 hours 1 min", 
       "value" : 10885 
      }, 
      "status" : "OK" 
     } 
     ] 
    } 
} 
+0

Check [здесь] техника (http://stackoverflow.com/questions/14958883/ios-serialize-deserialize- complex-json-generically-from-nsobject-class/16771574 # 16771574), который является более общим и менее подверженным ошибкам. –

ответ

1

Попробуйте

NSDictionary *jsonDict = (NSDictionary *) JSON;; 

NSArray *rows = jsonDict[@"rows"]; 
NSDictionary *row = rows[0]; 

NSArray *elements = row[@"elements"]; 
NSDictionary *element = elements[0]; 

NSDictionary *duration = element[@"duration"]; 
NSInteger value = [duration[@"value"] integerValue]; 
+1

Спасибо, друг :) –

0
[json objectForKey:@"elements"] 

является NSArray. Вы не можете инициализировать NSDictionary напрямую с помощью массива.

(в формате JSON, {и} обозначают пары ключ-значение, как NSDictionary, в то время как [и] разграничить упорядоченные списки, как NSArray, поэтому отображение делается, как это ...)

По мнению может вы понимаете время разработки, так что это может помочь.

+0

Извините, но NSDictionary не инициализирован массивом. –

+0

Для этого вам нужно получить первый объект из массива, а затем применить objectForKey. –

0

Вы можете использовать следующий код:

NSString *valueString = [[[[[rows objectAtindex:0]objectForKey:@"elements" ]objectAtindex:0]objectForKey:@"duration"] objectForKey:@"value"]; 

//if you want integer value 
NSInteger value = [valueString integerValue]; 
Смежные вопросы