jq在返回的json数据调用路径接入变量、javascript JSON路径中的变量、jq JSON路径中的变量

2 篇文章 0 订阅

jq在返回的json数据调用路径接入变量、javascript – JSON路径中的变量

先看返回的数据结构,红框是我们接下来要用变量来代替的内容:
在这里插入图片描述
我的想法是定义一个数组,然后再循环数组的元素去替换掉里面的key,从而获得里面的数据:

这里补充一个判断返回json数据里面是否含有某key的知识点:

//返回的data数据结构
data = {
    name: 'a',
    addr: 'b',
};
 //判断data是否存在某key
console.log('name' in data);   // true
console.log('addr' in data);   // true
console.log('hello' in data);  // false

语法:("key" in obj) //obj为对象类型

初始版本代码:

for (var i = 0; i < videolist.length; i++) {
if (('default' in res.items[0].snippet.thumbnails)) {
							$(".video-list li").append(
								'<p><img class="vtdefault" src="' + res.items[0].snippet.thumbnails.default.url +
								'" width="' + res.items[0].snippet.thumbnails.default.width + '" height="' + res
								.items[0].snippet.thumbnails.default.height + '"/></p>')
						}
						if (('high' in res.items[0].snippet.thumbnails)) {
							$(".video-list li").append(
								'<p><img class="vthigh" src="' + res.items[0].snippet.thumbnails.high
								.url + '" width="' + res.items[0].snippet.thumbnails.high.width +
								'" height="' + res.items[0].snippet.thumbnails.high.height + '"/></p>')
						}
						if (('maxres' in res.items[0].snippet.thumbnails)) {
							$(".video-list li").append(
								'<p><img class="vtmaxres" src="' + res.items[0].snippet.thumbnails
								.maxres.url + '" width="' + res.items[0].snippet.thumbnails.maxres
								.width + '" height="' + res.items[0].snippet.thumbnails.maxres.height +
								'"/></p>')
						}
						if (('medium' in res.items[0].snippet.thumbnails)) {
							$(".video-list li").append(
								'<p><img class="vtmedium" src="' + res.items[0].snippet.thumbnails
								.medium.url + '" width="' + res.items[0].snippet.thumbnails.medium
								.width + '" height="' + res.items[0].snippet.thumbnails.medium
								.height + '"/></p>')
						}
						if (('standard' in res.items[0].snippet.thumbnails)) {
							$(".video-list li").append(
								'<p><img class="vtstandard" src="' + res.items[0].snippet
								.thumbnails.standard.url + '" width="' + res.items[0].snippet
								.thumbnails.standard.width + '" height="' + res.items[0].snippet
								.thumbnails.standard.height + '"/></p>')
						}
						}

这样子虽然是实现了想要的效果,但是看着代码很是不雅,看到代码中只是中间的thumbnails.medium的medium这个地方变动。此刻直觉告诉我可以循环出来,然后说干就干:

var shuxing = ["default","high","maxres","medium","standard"];//定义了thumbnails下面的相关key
						for(var j=0;j<shuxing.length;j++){
						if ((shuxing[j] in res.items[0].snippet.thumbnails)) {
								$(".video-list li").append(
								'<img class="vt'+shuxing[j]+'" src="' + res.items[0].snippet.thumbnails.shuxing[j].url +
								'" width="' + res.items[0].snippet.thumbnails.shuxing[j].width + '" height="' + res
								.items[0].snippet.thumbnails.shuxing[j].height + '"/>')
						}
						}

一顿操作猛如虎啊,由于先入为主的思想然后就直接把变量用.shuxing[j]的模式接到里面去,详情以上代码。然后跑一下,Excuse me?报错了TypeError:无法读取未定义的属性“0”!!!
在这里插入图片描述
然后查了很久,由于很多时候返回的接口数据都是按需返回,所以很多时候都不用去修改调用地址,所以关于接口数据在前端调用时要修改路径的情况很少很少,文章也非常少,今日遇到了写一下出来方便大家!

最终版:

var shuxing = ["default","high","maxres","medium","standard"];
						for(var j=0;j<shuxing.length;j++){
						if ((shuxing[j] in res.items[0].snippet.thumbnails)) {
								$(".video-list li").append(
								'<img class="vt'+shuxing[j]+'" src="' + res.items[0].snippet.thumbnails[shuxing[j]].url +
								'" width="' + res.items[0].snippet.thumbnails[shuxing[j]].width + '" height="' + res
								.items[0].snippet.thumbnails[shuxing[j]].height + '"/>')
						}
						}

其实就是将thumbnails.shuxing[j] 改成 thumbnails[shuxing[j]]就可以了;

运行结果:
在这里插入图片描述
到此,问题算是解决了,此次记录方便以后查阅!

本人才疏学浅,如有错漏之处请不吝赐教!非常感谢!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值