2015-07-23 1 views
-5

Я пытаюсь получить некоторые ключи и значения снизу вложенного ответа JSON. Ниже я упомянул свою структуру ответа JSON, мне нужно получить все keys(Red, Green) и ключ values(Color and ID) из приведенного ниже ответа и загрузить в значение ячейки массива для таблицы.Как получить значения из вложенного JSON - Objective c

FYI: Я пробовал использовать NSDictionary, но я получаю все неупорядоченные значения. Мне также нужно получить упорядоченные значения. Пожалуйста, помогите мне!

{ 
response: { 

     RED: { 

     Color: "red", 
     color_id: "01", 

      }, 

     GREEN: { 

     Color: "green", 
     color_id: "02", 

       } 
}, 

Colorcode: { }, 
totalcolor: "122" 
} 

Мой код:

NSError *error; 
    NSDictionary *jsonDictionary = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; 
    NSArray *responsData = [jsonDictionary objectForKey:@"response"]; 
    NSLog("%@",[responsData objectAtIndex:0]); // here I am getting bad exception 

    NSDictionary *d1 = responsData.firstObject; 
    NSEnumerator *enum1 = d1.keyEnumerator; 
    NSArray *firstObject = [enum1 allObjects]; 
+0

Словари неупорядоченны, так что если вы хотите, чтобы порядок сохраняется, вы должны изменить оригинальный JSON, так что данные в 'response' является массивом, а не словарь. – Rob

+0

Да, я согласен. Я спрашиваю, как получить ключевые слова и ключевые значения без упоминания «keyname (например: Red)». как загрузить эти значения в отдельный массив для tableview. Если у вас есть образец кода здесь! Спасибо @Rob –

+0

@Apple_Ajay Можете ли вы опубликовать исходный ответ JSON? JSON в вопросе не является допустимым JSON. – GoodSp33d

ответ

1

У меня есть создать данные в формате JSON через кодирование, так не считают просто проверить следующий ответ

/// Create dictionary from following code 
     /// it just for input as like your code 
     NSMutableDictionary * dict = [[NSMutableDictionary alloc] init]; 
     NSMutableDictionary * innr = [[NSMutableDictionary alloc] init]; 
     [innr setObject:@"red" forKey:@"Color"]; 
     [innr setObject:@"01" forKey:@"color_id"]; 
     NSMutableDictionary * outer = [[NSMutableDictionary alloc] init]; 
     [outer setObject:innr forKey:@"RED"]; 

     innr = [[NSMutableDictionary alloc] init]; 
     [innr setObject:@"green" forKey:@"Color"]; 
     [innr setObject:@"02" forKey:@"color_id"]; 

     [outer setObject:innr forKey:@"GREEN"]; 

     [dict setObject:outer forKey:@"response"]; 

     // ANS ------ as follow 
     // get keys from response dictionary 
     NSMutableArray * key = [[NSMutableArray alloc] initWithArray:[dict[@"response"] allKeys]]; 

     // sort as asending order 
     NSSortDescriptor* sortOrder = [NSSortDescriptor sortDescriptorWithKey: @"self" ascending: YES]; 
     key = (NSMutableArray *)[key sortedArrayUsingDescriptors: [NSArray arrayWithObject: sortOrder]]; 


     // access inner data from dictonary 
     for (NSString * obj in key) { 
      NSLog(@"%@",dict[@"response"][obj][@"Color"]); 
      NSLog(@"%@",dict[@"response"][obj][@"color_id"]); 
     } 

Я думаю, что вы хотите так же, и он будет помочь тебе!

+0

Удивительный ответ. Как загрузить этот цвет и color_ID в отдельный массив для просмотра таблицы. Я знаю его простой способ опубликовать здесь. Это поможет другим. Спасибо. Отличная работа @Pravin –

+0

Создайте два массива и заполните их в цикле. И если это полезно для вас, пожалуйста, повысьте или согласитесь, чтобы другие могли ссылаться на него. –

+0

@Apple_Ajay Не загружайте 'color' и' color_id' в отдельные массивы. Вам нужен один массив словарей (таким образом, если вы отсортируете их, по имени цвета или по идентификатору цвета, они останутся вместе). – Rob

0

Если вы застряли с этим JSON, если вы хотите, массив значений, вы можете сделать следующее:

NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; 
NSDictionary *response = json[@"response"]; 
NSArray *colors = [response allValues]; 

Если вам нужно, что массив цветов, отсортированный по color_id, к примеру, вы можно сортировать, что сами:

NSArray *sortedColors = [colors sortedArrayUsingDescriptors:@[[[NSSortDescriptor alloc] initWithKey:@"color_id" ascending:TRUE]]]; 
Смежные вопросы