在Objective C中读取JSON文件

Tom*_*DRS 25 json objective-c ios

我现在已经搜索了大约两个小时,似乎没有人清楚地解释如何在Objective C中读取JSON文件.

假设我有一个名为JSON的文件colors.json,如下所示:

{
    "colors": [{
        "name": "green",
        "pictures": [{
            "pic": "pic1.png",
            "name": "green1"
        }, {
            "pic": "pic2.png",
            "name": "green2"
        }]
    }, {
        "name": "yellow",
        "pictures": [{
            "pic": "pic3.png",
            "name": "yellow1"
        }]
    }]
}
Run Code Online (Sandbox Code Playgroud)
  1. 我在哪里将该文件复制到我的XCode路径中?

  2. 如何以编程方式获取此文件?

  3. 我有这个文件后 - 如何读取name每个colors对象的值?

  4. 我怎么说"对于带有名称的颜色中的每张图片green,获取nameNSString中的值"?

我一直在尝试一些方法,但尚未得出结论.我只是理解JSON的概念错了吗?

Sim*_*mon 42

只需将您的JSON文件拖到Xcode中的项目导航器窗格中,它就会显示在与您的类文件相同的位置.

确保选中"如果需要,复制项目"复选框,并将其添加到正确的目标.

然后做这样的事情:

- (void)doSomethingWithTheJson
{
    NSDictionary *dict = [self JSONFromFile];

    NSArray *colours = [dict objectForKey:@"colors"];

    for (NSDictionary *colour in colours) {
        NSString *name = [colour objectForKey:@"name"];
        NSLog(@"Colour name: %@", name);

        if ([name isEqualToString:@"green"]) {
            NSArray *pictures = [colour objectForKey:@"pictures"];
            for (NSDictionary *picture in pictures) {
                NSString *pictureName = [picture objectForKey:@"name"];
                NSLog(@"Picture name: %@", pictureName);
            }
        }
    }
}

- (NSDictionary *)JSONFromFile
{
    NSString *path = [[NSBundle mainBundle] pathForResource:@"colors" ofType:@"json"];
    NSData *data = [NSData dataWithContentsOfFile:path];
    return [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
}
Run Code Online (Sandbox Code Playgroud)