Преобразование NSString данных JSON в NSArray
У меня есть NSString
, который хранит массив JSON
в форме NSString
. NSString
, называемый colorArray
, имеет значение:
[{ "color":"Red" },{ "color":"Blue" },{ "color":"Yellow"}];
У меня также есть табличное представление, которое я хотел бы импортировать в массив, чтобы заполнить таблицу. Таблица работает, если я загружаю tableData
в массив, как показано ниже, но я не могу понять, как преобразовать NSString
в массив, который можно использовать для заполнения tableData
, как показано ниже...
У кого-нибудь есть идеи? Большое спасибо!
- (void)viewDidLoad
{
[super viewDidLoad];
// Initialize table data
tableData = [NSArray arrayWithObjects:@"Red", @"Blue", @"Yellow", nil];
}
Ответы
Ответ 1
// Your JSON data:
NSString *colorArray = @"[{ \"color\":\"Red\" },{ \"color\":\"Blue\" },{ \"color\":\"Yellow\"}]";
NSLog(@"colorArray=%@", colorArray);
// Convert to JSON object:
NSArray *jsonObject = [NSJSONSerialization JSONObjectWithData:[colorArray dataUsingEncoding:NSUTF8StringEncoding]
options:0 error:NULL];
NSLog(@"jsonObject=%@", jsonObject);
// Extract "color" values:
NSArray *tableData = [jsonObject valueForKey:@"color"];
NSLog(@"tableData=%@", tableData);
Вывод:
colorArray=[{ "color":"Red" },{ "color":"Blue" },{ "color":"Yellow"}]
jsonObject=(
{
color = Red;
},
{
color = Blue;
},
{
color = Yellow;
}
)
tableData=(
Red,
Blue,
Yellow
)
На последнем этапе используется специальная функция -[NSArray valueForKey:]
который возвращает массив, содержащий результаты вызова valueForKey:
, используя ключ для каждого из объектов массива.
Ответ 2
Попробуйте
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *jsonString = ...//String representation of json
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
//colors is a NSArray property used as dataSource of TableView
self.colors = [NSJSONSerialization JSONObjectWithData:jsonData
options:NSJSONReadingMutableContainers
error:nil];
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return [self.colors count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
NSDictionary *color = self.colors[indexPath.row];
cell.textLabel.text = color[@"color"];
return cell;
}
Ответ 3
NSData * data = [colorArray dataUsingEncoding:NSUTF8StringEncoding]
NSDictionary *JSON =
[NSJSONSerialization JSONObjectWithData: data
options: NSJSONReadingMutableContainers
error: &e];
NSArray *tableData = [JSON valueForKey:@"color"];
Надеюсь, что это поможет.
Ответ 4
Предполагая, что вы используете ios 5 или выше, сериализация JSON встроена:
NSArray *json = [NSJSONSerialization
JSONObjectWithData:[string dataUsingEncoding:NSUTF8StringEncoding]
options:kNilOptions
error:&error];
До ios5 вы можете использовать SBJSON для достижения того же:
NSArray *jsonObjects = [jsonParser objectWithString:string error:&error];
Ответ 5
Вам просто нужно проанализировать ваши трэки следующим образом:
NSString *jsonString = @"[{\"color\":\"Red\" },{\"color\":\"Blue\" },{\"color\":\"Yellow\"}]";
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError *error = nil;
NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:&error];
после этого у вас есть массив dictionay, чтобы получить все значения, которые вам нужно сделать, закодировать массив и прочитать каждый словарь
NSMutableArray *colorsArray = [NSMutableArray arrayWithCapacity:[jsonArray count]];
for (NSDictionary *colorDictionary in jsonArray) {
NSString *colorString = [colorDictionary objectForKey:@"color"];
[colorsArray addObject:colorString];
}
Теперь colorsArray является NSMutableArray следующим образом:
[NSMutableArray arrayWithObjects:@"Red", @"Blue", @"Yellow", nil];
Ответ 6
Если ваши данные поступают из веб-службы:
NSArray *tableData = [[NSJSONSerialization JSONObjectWithData:request.responseData options: NSJSONReadingMutableContainers error: &error] objectForKey:"yourKeyForColorArray"];