Преобразование 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];
}
 borrrden09 июн. 2013 г., 15:39
-1 За вопрос, как конвертировать JSON в NSArray в 1000-й раз
 pampi25 нояб. 2016 г., 14:03
Я думаю, что его неявно преобразует, если в строку?

Ответы на вопрос(6)

Предполагая, что вы используетеIOS 5 или выше, JSON-сериализация встроена в:

NSArray *json = [NSJSONSerialization 
        JSONObjectWithData:[string dataUsingEncoding:NSUTF8StringEncoding]
        options:kNilOptions 
        error:&error];

До ios5 вы можете использоватьSBJSON добиться того же:

NSArray *jsonObjects = [jsonParser objectWithString:string error:&error];
NSData * data = [colorArray dataUsingEncoding:NSUTF8StringEncoding]
NSDictionary *JSON = 
    [NSJSONSerialization JSONObjectWithData: data
                                    options: NSJSONReadingMutableContainers 
                                      error: &e];

NSArray *tableData = [JSON valueForKey:@"color"];

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];

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

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];
Решение Вопроса
// 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: используя ключ на каждом массивеобъекты

 Martin R09 июн. 2013 г., 15:20
@Brandon: я добавил вывод NSLog, чтобы уточнить шаги.
 Martin R09 июн. 2013 г., 15:15
@Brandon: обратные косые черты были просто необходимы, чтобы определить входные данные для примера как строковую константу в коде примера.
 Brandon09 июн. 2013 г., 15:13
Спасибо Мартин, я проверю это. Должна ли строка NSSt содержать косые черты, чтобы преобразование работало правильно? Еще раз спасибо!

Пытаться

- (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;
}

NSArray *tableData = [[NSJSONSerialization JSONObjectWithData:request.responseData options: NSJSONReadingMutableContainers error: &error] objectForKey:"yourKeyForColorArray"];

Ваш ответ на вопрос