16

我有NSString一个JSONNSString. 被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];
}
4

6 回答 6

43
// 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"}]
json对象=(
        {
        颜色=红色;
    },
        {
        颜色=蓝色;
    },
        {
        颜色=黄色;
    }
)
表数据=(
    红色的,
    蓝色的,
    黄色
)

最后一步使用返回一个数组的特殊功能,该数组包含使用每个数组对象上的键-[NSArray valueForKey:] 调用的结果。valueForKey:

于 2013-06-09T13:11:51.843 回答
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;
}
于 2013-06-09T13:15:32.870 回答
1
NSData * data = [colorArray dataUsingEncoding:NSUTF8StringEncoding]
NSDictionary *JSON = 
    [NSJSONSerialization JSONObjectWithData: data
                                    options: NSJSONReadingMutableContainers 
                                      error: &e];

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

希望这可以帮助..

于 2013-06-09T13:26:03.780 回答
0

假设您使用的是ios 5 或更高版本,则内置 JSON 序列化:

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

在 ios5 之前,您可以使用SBJSON来实现相同的功能:

NSArray *jsonObjects = [jsonParser objectWithString:string error:&error];
于 2013-06-09T13:16:26.190 回答
0

您只需要以这种方式解析您的字符串:

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];
于 2013-06-09T13:20:20.183 回答
0

如果您的数据来自网络服务:

NSArray *tableData = [[NSJSONSerialization JSONObjectWithData:request.responseData options: NSJSONReadingMutableContainers error: &error] objectForKey:"yourKeyForColorArray"];
于 2013-06-09T13:25:54.673 回答