2013-10-15 54 views
0

我有以下內容的字符串:一個Objective-C中獲得的JSON值

{"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"]; 

直到這裏就是一切好!但現在我正在試圖獲取所有內部數據... 我需要在循環中獲取每個「uid」,「fbId」和「name」數據,但我不知道該怎麼做!

如果我使用下面的代碼,我看到我是在正確的方式。但我不知道如何獲得「物品」屬性。

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

這不是一個數組,因爲我的意思是你的根對象是一個字典,任何你必須使用valueForKey而不是ObjectForKey,因爲你錯誤地將數組轉換爲數組。 –

+0

查看NSDictionary接口:https://developer.apple.com/library/ios/documentation/cocoa/reference/foundation/Classes/NSDictionary_Class/Reference/Reference.html –

回答

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"]); 
} 
0

使用此代碼訪問值:

NSDictionary *results=[NSJSONSerialization JSONObjectWithData:friendsData options:NSJSONReadingMutableLeaves error:nil]; 
if([[results valueForKey:@"friends"] isKindOfClass:[NSArray class]]) 
     { 
      for(int i=0;i<[[results valueForKey:@"friends"] count];i++) 
      { 
       [friendsArrayFinal addObject:[[results valueForKey:@"friends"] objectAtIndex:i]]; 
      } 
     } 

在這裏你可以得到FriendsArrayfinal所有對象。如果你想訪問特定對象而不是使用:

NSString *uid=[NSString stringWithFormat:@"%@",[[friendsArrayFinal objectAtIndex:0] valueForKey:@"uid"]]; 
1

首先,不要使用objectForKey,ArrayForKey,BoolForKey或類似的東西。現代Objective-C語法提供了一種簡單易讀的關鍵索引表示法。使用它。

它看起來像這樣

dict[@"key"]; 

當然你也可以通過一個字符串變量,而不是字面

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

二:

如果你知道他們的密鑰,你要訪問,然後您只需按名稱訪問它們

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"],關鍵不在字典你會得到零結果。