如何使用JS读取JSON文件中stopTime后的嵌套子字段?
解决JSON嵌套数组字段读取问题
别担心,刚接触JavaScript操作JSON时,碰到这种嵌套的数组结构很容易卡壳,我来一步步教你怎么获取mediaFiles里的字段!
首先先理清楚你的JSON结构:
description是一个数组,每个元素是包含mediaFiles的对象mediaFiles本身也是一个数组,里面的每个元素才是包含mediaUri、mediaPath这些字段的对象
你只需要在现有的循环里,再深入一层去访问这个嵌套数组就可以了。
修改后的代码示例
在你现有的for循环内部,添加以下代码就能读取到嵌套字段:
var J = []; $.getJSON( "calls/jsonfile.json", function( data){ J = data; // 遍历description数组(建议用length代替固定48,适配不同数据量) for(var x=0; x < J.description.length; ++x) { var id = J.description[x].id; var stopTime = J.description[x].stopTime; // --- 新增读取mediaFiles的代码 --- // 先获取当前description项对应的mediaFiles数组 var mediaFiles = J.description[x].mediaFiles; // 遍历mediaFiles数组(处理可能存在的多个媒体文件) for(var i = 0; i < mediaFiles.length; i++){ // 读取嵌套字段 var mediaUri = mediaFiles[i].mediaUri; var mediaPath = mediaFiles[i].mediaPath; var mediaStartTime = mediaFiles[i].startTime; // 测试输出,你可以替换成自己的业务逻辑 console.log(`第${x+1}个记录的第${i+1}个媒体文件:`); console.log("媒体URI:", mediaUri); console.log("本地路径:", mediaPath); console.log("媒体开始时间:", mediaStartTime); } // --- 新增结束 --- } });
额外小提示
如果能确定每个description项里的mediaFiles只有一个元素,也可以直接通过索引访问,不用内层循环:
// 先判断mediaFiles是否存在且有内容,避免报错 if(J.description[x].mediaFiles && J.description[x].mediaFiles.length > 0){ var firstMedia = J.description[x].mediaFiles[0]; var mediaUri = firstMedia.mediaUri; var mediaPath = firstMedia.mediaPath; // ... 其他字段同理 }
加个判断是为了防止某些description项没有mediaFiles时出现报错,让代码更健壮。
核心思路就是:一层一层拆解结构,先拿到外层的对象,再找到里面的数组,最后遍历数组里的对象获取具体字段~
内容的提问来源于stack exchange,提问作者user1544780
相关产品推荐
相关产品推荐

