代码之家  ›  专栏  ›  技术社区  ›  Tulon

获取JSON中所有对象的特定键值

  •  0
  • Tulon  · 技术社区  · 11 年前

    这是我的JSON:

    {
    "Frames":
    [
    {"Image":"1.png", "Time":"0.04"},
    {"Image":"2.png", "Time":"0.04"},
    {"Image":"3.png", "Time":"0.04"},
    {"Image":"4.png", "Time":"0.04"},
    {"Image":"5.png", "Time":"0.04"},
    {"Image":"6.png", "Time":"0.04"},
    {"Image":"7.png", "Time":"0.04"},
    {"Image":"8.png", "Time":"0.04"},
    {"Image":"9.png", "Time":"0.04"},
    {"Image":"10.png", "Time":"0.04"},
    {"Image":"11.png", "Time":"0.04"},
    {"Image":"12.png", "Time":"0.04"},
    {"Image":"13.png", "Time":"0.04"},
    {"Image":"14.png", "Time":"0.04"},
    {"Image":"15.png", "Time":"0.04"},
    {"Image":"16.png", "Time":"0.04"},
    {"Image":"17.png", "Time":"0.04"},
    {"Image":"18.png", "Time":"0.04"},
    {"Image":"19.png", "Time":"0.04"},
    {"Image":"20.png", "Time":"0.04"}
    ]
    }
    

    我想保存的每个值(这里总共20个) Image 键入一个 NSMutableArray 名称 imageNamesArray 以及 Time 键入另一个 NS可变阵列 名称 durationArray .

    我试着用 [dictionary valueForKeyPath:@"Frames.Image"] 如下所示:

    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"animation" ofType:@"json"];
    NSData *content = [[NSData alloc] initWithContentsOfFile:filePath];
    
    NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
    dictionary = [NSJSONSerialization JSONObjectWithData:content options:kNilOptions error:nil];
    NSMutableDictionary *detailsDictionary = [[NSMutableDictionary alloc] init];
    
    
    self.imageNamesArray = [[NSMutableArray alloc] init];
    self.durationArray = [[NSMutableArray alloc] init];
    
    [self.imageNamesArray addObject:[dictionary valueForKeyPath:@"Frames.Image"]];
    [self.durationArray addObject:[dictionary valueForKeyPath:@"Frames.Time"]];
    
    NSLog(@"imageNamesArray %@", [imageNamesArray objectAtIndex:0]);
    NSLog(@"durationArray %@", durationArray);
    

    但是,它保存了所有 形象 的第一行中的键值 图像名称阵列 (我的意思是 [imageNamesArray objectAtIndex:0] ). 同样适用于 持续时间阵列 。我该怎么做? 提前非常感谢。

    输出将是

    imageNamesArray = 1.png, 2.png...........20.PNG
    durationArray = 0.04, 0.04...............0.04
    
    2 回复  |  直到 11 年前
        1
  •  1
  •   kocakmstf    11 年前

    您应该使用第一帧对象作为数组并在其中循环。

            NSString *filePath = [[NSBundle mainBundle] pathForResource:@"animation" ofType:@"json"];
            NSData *content = [[NSData alloc] initWithContentsOfFile:filePath];
    
            NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
            dictionary = [NSJSONSerialization JSONObjectWithData:content options:kNilOptions error:nil];
    
        //this is your loop array
            NSArrray *objArray=[dictionary objectForKey:@"Frames"];
    
            NSMutableDictionary *detailsDictionary = [[NSMutableDictionary alloc] init];
    
    
            self.imageNamesArray = [[NSMutableArray alloc] init];
            self.durationArray = [[NSMutableArray alloc] init];
    
            for (NSDictionary *dic in objArray) {
                [self.imageNamesArray addObject:dic[@"Image"]]; 
                [self.durationArray addObject:dic[@"Time"]]; 
           }
    
            NSLog(@"imageNamesArray %@", [imageNamesArray objectAtIndex:0]);
            NSLog(@"durationArray %@", durationArray);
    
        2
  •  1
  •   Bhumeshwer katre    11 年前

    你可以通过每个 NSDictionary 并可以将对象添加到相应的数组中。

    for (NSDictionary *dict in dictionary[@"Frames"]) {
        [_imageNamesArray addObject:dict[@"Image"]];
        [_durationArray addObject:dict[@"Time"]];
    }
    NSLog(@"imageNamesArray %@--%ld", _imageNamesArray, _imageNamesArray.count);
    NSLog(@"durationArray %@--%ld", _durationArray, _durationArray.count);