2014-02-17 98 views
0

我有以下JSON格式存儲在NSDictionary中。我將如何提取audio_link從NSDictionary獲取JSON子元素

{ 
    "results": [ 
    { 
     "audio_link": "http://www.website.com/Alive.mp3", 
     "author": "John", 
     "date_created": "2014-02-17 05:12:25" 
    } 
    ] 
} 

我已經試過

NSString * songUrl = [[json objectForKey:@"results"] objectForKey:@"url"]; 

但失敗了。

+0

開發人員應該知道如何識別json中的對象。在這裏閱讀將爲您節省時間:http://www.json.org –

回答

4

你有字典,其中包含字典的數組。嘗試:

NSString * songUrl = [[json objectForKey:@"results"][0] objectForKey:@"audio_link"]; 
0

"results"是詞典的數組:

{ 
    "audio_link": "http://www.website.com/Alive.mp3", 
    "author": "John", 
    "date_created": "2014-02-17 05:12:25" 
} 

,當你調用[[json objectForKey:@"results"] objectForKey:@"url"]它會回報你數組包含值的字符串鍵"url"
所以,如果你不知道如何很多對象將是這個陣列,你應該更好地使用 [[[json objectForKey:@"results"] objectForKey:@"audio_link"] lastObject]

0

你可以使用Mantle。它以一種乾淨的方式解決了這個問題。

實施例:

@interface ClassName : MTLModel 
@property (nonatomic, strong) NSString *audioLink; 
@property (nonatomic, strong) NSString *author; 
@property (nonatomic, strong) NSString *creationDate; 
@end 

@implementation ClassName 
+ (NSDictionary *)JSONKeyPathsByPropertyKey 
{ 
    return @{ 
      @"audioLink" : @"audio_link", 
      @"author"  : @"author", 
      @"creationDate" : @"date_created" 
      }; 
} 
@end 


ClassName *item = [MTLJSONAdapter modelOfClass:[ClassName class] fromJSONDictionary:jsonDictionary["results"][0] error:nil]; 
0

假設有可以是一個,幾個,或者您的結果陣列中沒有項:

NSArray* results = json [@"result"]; 
for (NSDictionary* result in results) 
{ 
    NSString* audioLink = result [@"audioLink"]; 
    // and so on 
} 

的結果,如果有不是[0]將拋出異常實際上任何結果;如果在結果中沒有項目,並且即使根本沒有結果數組,循環「for(NSDictionary * result in results)也可以正常工作。