从NSDictionary获取JSON子元素

时间:2014-02-17 15:50:48

标签: ios objective-c json nsdictionary

我在NSDictionary中存储了以下JSON格式。我如何提取audio_link

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

但失败了。

4 个答案:

答案 0 :(得分:4)

你有包含字典数组的字典。试试这个:

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

答案 1 :(得分: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]

答案 2 :(得分: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];

答案 3 :(得分:0)

假设结果数组中可能有一个,几个或没有项目:

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

如果实际上没有任何结果,结果[0]将抛出异常;如果结果中没有项目,即使根本没有结果数组,循环“for(NSDictionary * result in results)也能正常工作。”