0

У меня есть JSON ответ ниже формата & Я разбираю его в NSMutableDictionary, который снова я пытаюсь отфильтровать в отдельные словари. Например, из нижеследующего ответа я хочу сделать membersDictionary out всего ответа JSON, но не можете найти способ сделать это.Разбор JSON в NSMutableDictionary issue

[ 
    { 
     "members": [ 
      { 
       "lat": "45.747711", 
       "lng": "4.824100" 
      }, 
      { 
       "lat": "47.747711", 
       "lng": "3.824100" 
      } 
     ], 
     "professionnels": [ 
      { 
       "lat": "45.747711", 
       "lng": "4.824100" 
      }, 
      { 
       "lat": "47.747711", 
       "lng": "3.824100" 
      } 
     ] 
    } 
] 

Вот как я делаю отдельный словарь из всего ответа.

NSMutableArray *latArray = [[NSMutableArray alloc] init]; 
NSMutableArray *lngArray = [[NSMutableArray alloc] init]; 

for (NSDictionary *obj in self.jsonDictionary) //this is NSMutableDictionary which contains whole response. 
{ 
    _membersDict = [obj objectForKey:@"members"]; 

    for (NSDictionary *obj in _membersDict) 
    { 
     NSString *latitudeString = [obj objectForKey:@"lat"]; 
     NSString *longitudeString = [obj objectForKey:@"lng"]; 

     [latArray addObject:latitudeString]; 
     [lngArray addObject:longitudeString]; 
    } 
} 
NSLog(@"members dict fetched %@", _membersDict); // SHOWS NULL 
NSLog(@"latitude array - %@", latArray);   // shows values 
NSLog(@"longitude array - %@", lngArray);   // shows values 
+0

Как вы заселить self.jsonDictionary? – Joshua

+0

Итак, я предполагаю, что '_jsonDictionary' и' _membersDict' являются массивами, как в вашем JSON, так? –

+0

jsonDictioanry и membersDict .... оба являются NSMutableDictionary – icodes

ответ

0

Ваш JSON имеет массив словарей, поэтому сначала примените его к массиву и петлю над массивом. На каждой итерации у вас будет словарь, а затем вы сможете получить к ним доступ. [] показывает массив.

for (NSDictionary *dic in jsonArray){ 
    //Now your dic store key value, and value is again in array 
    NSArray *memberArray = [dic objectForKey:@"member"]; 
    //memberArray contain dictionarys 
    for (NSDictionary *memDic in memberArray){ 
    NSString *lat = memDic objectForKey:@"lat"]; 
    //and same for other value 
    } 
    //Now do the same for professional 

    } 
+0

okay ... В моем случае у меня есть NSMutableDictionary (self.jsonDictionary), у которого есть весь ответ ... Так что я должен сделать его массивом? – icodes

+0

Да, потому что вы получаете массив в json-ответе –

+0

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

0

Самый простой способ заключается в использовании КВЦ Коллекция Операторы:

NSArray *latArray = [self.jsonDictionary valueForKeyPath:@"@unionOfArrays.members.lat"]; 
NSArray *lngArray = [self.jsonDictionary valueForKeyPath:@"@unionOfArrays.members.lng"];