iOS中如何从YouTube搜索API的JSON提取videoId并加载视频
解决YouTube搜索JSON提取videoId的问题
首先,先确认你解析后的JSON数据结构是否符合预期。你可以从打印的日志里摘出items部分,重点检查:
items是否为非空数组- 第一个
items元素下的id字典里是否存在videoId键(注意键名大小写,YouTube API返回为驼峰式videoId,需确保拼写无误)
如果结构没问题,以下是两种可靠的提取方案:
方式一:逐层安全取值(推荐,避免空指针崩溃)
// 假设已将JSON数据解析为NSDictionary *responseDict NSArray *items = responseDict[@"items"]; if (items.count > 0) { NSDictionary *firstItem = items[0]; NSDictionary *idDict = firstItem[@"id"]; // 先确认当前结果是视频类型,避免频道/播放列表等无videoId的情况 if ([idDict[@"kind"] isEqualToString:@"youtube#video"]) { NSString *videoId = idDict[@"videoId"]; if (videoId) { [self.playerView loadWithVideoId:videoId]; } else { NSLog(@"未找到有效videoId"); } } else { NSLog(@"当前结果非视频类型,无videoId"); } } else { NSLog(@"搜索结果为空"); }
方式二:修正valueForKeyPath的使用
若坚持使用valueForKeyPath,需确保解析后的responseDict是NSDictionary类型,且层级完全匹配。同时要提前判断结果有效性:
NSString *videoId = [responseDict valueForKeyPath:@"items.0.id.videoId"]; if (videoId) { [self.playerView loadWithVideoId:videoId]; } else { NSLog(@"提取videoId失败,请检查JSON结构或搜索结果类型"); }
常见排查点
- 检查JSON解析代码:确保用
NSJSONSerialization JSONObjectWithData:options:error:解析后得到的是NSDictionary(YouTube搜索API的根节点为字典,而非数组) - 核对结果类型:部分搜索结果可能是频道、播放列表,这类结果的
id下只有channelId或playlistId,只有kind为youtube#video的结果才包含videoId
内容的提问来源于stack exchange,提问作者BinDev
相关产品推荐
相关产品推荐

