Разобрать JSON из AFNetworking для отображения в UITableView
Я недавно использую AFNetworking
получить JSON
и разобрать его, я импортировал его в свой проект и получил JSON
но я не знаю, как можно разобрать JSON
для отображения, особенно в Objective-C.
Вот код в моем viewDidLoad
получить JSON
:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:@"http://api.androidhive.info/json/movies.json" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
Восстановленный JSON
для разбора:
{
genre = (
Action,
Drama,
"Sci-Fi"
);
image = "http://api.androidhive.info/json/movies/1.jpg";
rating = "8.300000000000001";
releaseYear = 2014;
title = "Dawn of the Planet of the Apes";
},
{
genre = (
Action,
"Sci-Fi",
Thriller
);
image = "http://api.androidhive.info/json/movies/4.jpg";
rating = "8.4";
releaseYear = 2014;
title = "X-Men: Days of Future Past";
},
{
genre = (
Action,
Adventure,
Fantasy
);
image = "http://api.androidhive.info/json/movies/7.jpg";
rating = "7.3";
releaseYear = 2014;
title = "The Amazing Spider-Man 2";
},
{
genre = (
Animation,
Comedy,
Family
);
image = "http://api.androidhive.info/json/movies/9.jpg";
rating = "8.300000000000001";
releaseYear = 2013;
title = Rush;
},
{
genre = (
Animation,
Adventure,
Family
);
image = "http://api.androidhive.info/json/movies/15.jpg";
rating = "8.199999999999999";
releaseYear = 2010;
title = "How to Train Your Dragon";
}
)
Обновить:
Как можно отобразить и сохранить полученные данные, чтобы их было легче отобразить в UITableView
, я пытался сделать как:
NSLog(@"JSON: %@", [responseObject objectForKey:@"image"]);
чтобы получить только целые изображения, но он падает. мне просто нужно получить, например, все заголовки и сохранить их в массиве, а затем отобразить их UITableView
,
2 ответа
Вы пытаетесь таким образом получить данные от NSDictionary
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:@"http://api.androidhive.info/json/movies.json" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"JSON: %@", responseObject);
self.arrData=[[NSMutableArray alloc]initWithArray:responseObject];
[self.tableView reloadData];// reload table data
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
Метод делегирования TableView
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// your cell code here
// indexPath.row(use in tableView) means your number of index to get value
NSLog(@"JSON: %@", [[self.arrData objectAtIndex:indexPath.row] objectForKey:@"image"]);
NSLog(@"title: %@", [[self.arrData objectAtIndex:indexPath.row] objectForKey:@"title"]);
NSLog(@"rating: %@", [[self.arrData objectAtIndex:indexPath.row] objectForKey:@"rating"]);
NSLog(@"releaseYear: %@", [[self.arrData objectAtIndex:indexPath.row] objectForKey:@"releaseYear"]);
NSLog(@"genre: %@", [[self.arrData objectAtIndex:indexPath.row] objectForKey:@"genre"]);// return array get value particular using array index
}
AFNetworking возвращает уже обработано JSON
в responseObject
- а в вашем случае это NSArray NSDictionary объектов внутри него.
Для доступа к одному NSDictionary создайте свойство NSArray (например, resultArray
) и установите его responseObject
, тогда вы можете получить доступ к его объектам resultArray[1]
(не забудьте проверить отказов).
Затем вы можете получить доступ к значениям dictionary
по их ключам (myDictionary[@"title]
и так далее).