解析Vimeo API嵌套JSON:筛选直播状态对象问题求助
问题描述
我搭建了一个fiddle(内含简化后的JSON响应),需要遍历该JSON,筛选出metadata.connections.live_video.status为'streaming'的对象。目前无法访问目标属性及对应值,甚至多次循环时用console.log统计实例数量也失败。最终需求是:当对象的metadata.connections.live_video.status等于'streaming'时,把整个对象取出并存储为const,方便访问其未在示例中展示的其他属性。
当前使用的代码:
$.each(json.body.data, function(key , value){ // First Level $.each(value.metadata.connections, function(ky , vl ){ // The contents inside data console.log(ky); }); });
解决方法
方案一:原生JS filter 方法(推荐)
直接用数组的filter方法筛选,代码更简洁高效:
// 筛选所有符合条件的对象,存入数组 const streamingObjects = json.body.data.filter(item => item?.metadata?.connections?.live_video?.status === 'streaming' ); // 若只需第一个符合条件的对象 const firstStreamingObj = streamingObjects[0];
方案二:jQuery $.each 适配版
如果习惯用jQuery遍历,调整代码如下:
const streamingObjects = []; $.each(json.body.data, function(key, item) { // 逐层判断属性是否存在,避免未定义报错 if (item.metadata && item.metadata.connections && item.metadata.connections.live_video && item.metadata.connections.live_video.status === 'streaming') { streamingObjects.push(item); } });
注意事项
- 可选链操作符
?.能简化层级属性的存在性判断,需ES2020及以上环境支持;若要兼容旧环境,用&&逐层校验属性是否存在即可。 - 筛选后的
streamingObjects是符合条件的对象数组,直接从中提取对象就能访问其所有属性。
内容的提问来源于stack exchange,提问作者Dirty Bird Design
相关产品推荐
相关产品推荐

