web-dev-qa-db-ja.com

Objective CでJSONファイルを読み取る

私は今約2時間探し回っていますが、誰もObjective CでJSONファイルを読み取る方法の明確な説明をしていないようです。

次のようなcolors.jsonというJSONファイルがあるとします。

{
    "colors": [{
        "name": "green",
        "pictures": [{
            "pic": "pic1.png",
            "name": "green1"
        }, {
            "pic": "pic2.png",
            "name": "green2"
        }]
    }, {
        "name": "yellow",
        "pictures": [{
            "pic": "pic3.png",
            "name": "yellow1"
        }]
    }]
}
  1. XCodeパスのどこにそのファイルをコピーしますか?

  2. このファイルをプログラムで取得するにはどうすればよいですか?

  3. このファイルを取得した後-各nameオブジェクトのcolors値を読み取るにはどうすればよいですか?

  4. greenという名前の色の各画像について、NSStringでname値を取得する」と言うにはどうすればよいですか?

私はいくつかの方法を試してきましたが、まだ結論に達していません。 JSONの概念を間違って理解しているだけですか?

21
TomQDRS

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];
}
39
Simon