2014-02-17 5 views
0

У меня есть следующий формат JSON, хранящийся в NSDictionary. Как я могу извлечь audio_link?Получить подэлемент JSON из NSDictionary

{ 
    "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] будет бросать исключение, если нет фактически любые результаты; цикл "для (NSDictionary * result in results) будет работать нормально, если в результатах нет элементов, и даже если массив результатов вообще отсутствует.

Смежные вопросы