0

以下の内容の文字列があります。

 {"friends":[
  {"uid":25,"fbUid":100004063444823,"name":"Andressa Albuquerque","score":100},
   {"uid":51,"fbUid":1297546080,"name":"Daniel Negri","score":5690}
]}

したがって、次のコードを使用して、json コードを NSArray として取得します。

NSError *jsonParsingError = nil;
NSData *friendsData = [friendsString dataUsingEncoding:NSUTF8StringEncoding];
NSArray *friendsArray = [NSJSONSerialization JSONObjectWithData:friendsData options:NSJSONReadingMutableContainers|NSJSONReadingAllowFragments error:&jsonParsingError];
NSArray *friendsArrayFinal = [friendsArray valueForKey:@"friends"];

ここまではOK!しかし今、私はすべての内部データを取得しようとしています...「uid」、「fbId」、「name」の各データをループ内で取得する必要がありますが、その方法がわかりません!

以下のコードを使用すると、正しい方法であることがわかります。しかし、「アイテム」プロパティを取得する方法がわかりません。

for(NSDictionary *item in friendsArrayFinal) 
{
   NSLog(@"Item: %@", item);
}
4

3 に答える 3

1

初め。objectForKey、ArrayForKey、BoolForKey などは使用しないでください。最新の Objective-C 構文は、シンプルで読みやすいキー インデックス表記を提供します。それを使用します。

このように見えます

dict[@"key"];

もちろん、リテラルの代わりに文字列変数を渡すことができます

NSString * key = @"MY_SECRET_SUPER_LONG_KEY_THAT_I_DONT_WANT_TO_TYPE";
dict[key];

2番:

アクセスしたいキーがわかっている場合は、名前でアクセスするだけです

for(NSDictionary *friend in friendsArrayFinal) {
  friend[@"uid"]; 
  friend[@"fbUid"];
  friend[@"name"];
  friend[@"score"];
}

潜在的なキーがわからない場合、またはそれらの一部が欠落している可能性がある場合は、キーを反復処理できます

for(NSDictionary *friend in friendsArrayFinal) {
  for(NSString * key in friend) {
    NSlog(@"key: %@",key);
    NSlog(@"value: %@",friend[key]);
  }
}

ボーナス回答:

あなたがそうdict[@"keyThatIsNotInDict"]し、キーがdictにない場合、結果としてnilが得られます。

于 2013-10-15T05:03:22.710 に答える
0

次のような値にアクセスできます

for(NSDictionary *item in friendsArrayFinal) {
  NSLog(@"Item: %@", item);
  NSLog(@"%@",[item valueForKey:@"uid"]);
  NSLog(@"%@",[item valueForKey:@"fbUid"]);
  NSLog(@"%@",[item valueForKey:@"name"]);
  NSLog(@"%@",[item valueForKey:@"score"]);
}
于 2013-10-15T04:20:07.783 に答える