2014-10-12 2 views
-4

Я сейчас в процессе создания своего первого приложения для iOS. В рамках этого приложения мне нужно получить некоторые данные с веб-сервера. Ниже функция является частью того, что:Преобразование ответа JSON на массив

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    NSLog(@"connectionDidFinishLoading"); 
    NSLog(@"Succeeded! Received %d bytes of data",[self.responseData length]); 

    // convert to JSON 
    NSError *myError = nil; 
    NSDictionary *res = [NSJSONSerialization JSONObjectWithData:self.responseData options:NSJSONReadingMutableLeaves error:&myError]; 

    // show all values 
    for(id key in res) { 

     id value = [res objectForKey:key]; 

     NSString *keyAsString = (NSString *)key; 
     NSString *valueAsString = (NSString *)value; 

     NSLog(@"key: %@", keyAsString); 
     NSLog(@"value: %@", valueAsString); 
    } 

} 

Это идет через данные JSON, которые он распаковывает (Вы можете увидеть пример данных ниже). Тем не менее, для того, чтобы я мог представить его в виде таблицы, мне нужно преобразовать его в NSArray. Как это:

self.array = [[NSArray alloc] initWithObjects: 
    @"Always put your fears behind you and your dreams in front of you.", 
    @"A relationship with no trust is like a cell phone with no service, all you can do is play games.", 
    @"People should stop talking about their problem and start thinking about the solution.", 
    @"Dear Chuck Norris, Screw you. I can grill burgers under water. Sincerely, Spongebob Squarepants.", 
    @"My arms will always be open for you, they will never close, not unless you're in them.", 
    nil]; 

И как было обещано, это данные с сервера - ответ JSON:

{"data": "[ 

    {"TVShow1":"Dexter", "Episodes":"125"}, 
    {"TVShow2":"Boardwalk Empire", "Episodes":"54"}, 
    {"TVShow3":"Fargo", "Episodes":"10"}, 
    {"TVShow1":"The Sopranos", "Episodes":"11"} 

]"} 

Как я могу изменить, что на NSArray?

+0

Почему вы ** нуждаетесь **, чтобы преобразовать его в массив? Вы определенно можете ** использовать ** NSDictionary' для заполнения табличного представления, не так ли? В любом случае, какова даже связь между двумя отрывками, которые вы опубликовали? Кажется, что нет ... –

ответ

1

Вам ничего не нужно менять.

Ваш json - это объект, который уже содержит массив, называемый data в вашем случае.

NSArray *data = [res objectForKey:@"data"];//for sake of demo but should be a property 
NSLog(@"",data);//that's your data source 

Затем в cellAtIndexRow делегатом, читать значения:

cell.textLabel.text = data[indexPath.row][@"Episodes"];//that will display episode 
1

NSJSONSerialization собирается преобразовать его в NSDictionary для вас, как показано на рисунке. Оттуда просто войдите в массив, используя ключ data:

NSDictionary *res = [NSJSONSerialization JSONObjectWithData:self.responseData options:NSJSONReadingMutableLeaves error:&myError]; 

NSArray *data = res[@"data"]; 
if (!data) { 

    NSLog(@"Error: no data array was found."); 

} 

// do something with the data array 
Смежные вопросы