2jq的下载安装
Mac:Mac还是一如既往的简单,装了Homebrew的话一条命令brewinstalljq即可其他系统:jq的官网很贴心,给出了各个系统的下载方式及其相关所需下载工具的链接,具体的就查看官网吧,链接如下
3jq的基本使用
基本过滤.
最简单的过滤,.这是一个过滤器,它接受输入,并将其不变地生成为输出。
简单的说就是原样输出来:$echo"{"jq":"jqTest"}"|jq"."{"jq":"jqTest"}
对象过滤.key、.keykey.["key"]
可以通过.key或.keykey2的方式来获取对应的value,这样的方式是不是有点像jsonpath?
$echo"{"jq":{"jqTest":1}}"|jq".jq"{"jqTest":1}$echo"{"jq":{"jqTest":1}}"|jq".jq.jqTest"1$echo"{"jq":{"jqTest":1}}"|jq".["jq"]"{"jqTest":1}
索引过滤.key[index]、.key[startIndex:endIndex]
其实就是在对象过滤的基础上加个索引而已,学过编程的都懂的~左闭右开,当然是针对数组的操纵,这里就以一种对象过滤写法基础上举例子,
.key[index]$echo"{"jq":["jqTest",1]}"|jq".jq[0]""jqTest".key[startIndex:endIndex]$echo"{"jq":["jqTest",1]}"|jq".jq[0:1]"["jqTest"]
对象构建{}、[]
可以利用{}、[]构建新的对象
$echo"{"jq":["jqTest",1]}"|jq"{newJq:.jq,}"{"newJq":1}如果其中一个表达式有多个结果,那么输出也会产生多个结果$echo"{"user":"stedolan","titles":["JQPrimer","MoreJQ"]}"|jq"{user,title:.titles[]}"{"user":"stedolan","title":"JQPrimer"}{"user":"stedolan","title":"MoreJQ"}如果key是不存在的,value将会赋值为null$echo"{"user":"stedolan","titles":["JQPrimer","MoreJQ"]}"|jq"{user111,title:.titles[]}"{"user111":null,"title":"JQPrimer"}{"user111":null,"title":"MoreJQ"}如果再键的周围加括号就意味着它将作为表达式进行计算。$echo"{"user":"stedolan","titles":["JQPrimer","MoreJQ"]}"|jq"{:.titles[]}"{"stedolan":"JQPrimer"}{"stedolan":"MoreJQ"}
其他常见用法:
计算echo"10"|jq"*5"echonull|jq"{a:1}+{b:2}+{c:3}+{a:42}"echo"["xml","yaml","json"]"|jq".-["xml"]"echo"{"a":5}"|jq‘.a+=10"获取长度echo"[[1,2],"string",{"a":2},null]"|jq".[]|length’
数组运算
jq对于数组可以有并集和差集的操作:并集:有数组a,b;a+b就会得到一个包含所有a,b数组元素的新数组:$echo"{"a":[1,2,3],"b":[3,4,5]}"|jq".a+.b"[1,2,3,3,4,5]差集:有数组a,b;a-b就会得到一个只包含a中元素,不包含b中元素的新数组:$echo"{"a":[1,2,3],"b":[3,4,5]}"|jq".a-.b"[1,2]
更多用法
Mock实现
1实现目标
如下中的科普推荐栏目中有2则科普文章,现在想要mock几十甚至上百篇文章或广告。
2数据准备
抓取接口的响应json报文如下:
我们将数据存入json文件中,然后赋值给一个变量
然后我们利用jq对pageList中的列表进行+=操作,完成一次翻倍增长,将结果传给变量mockData。
这里用到的是jq对数组的并集运算,两个数组相加,最终得到一个包含两个数组所有元素的新数组。
说了这么多“废话”,总算是到了主角了,其实数据准备好了,工具的使用还是很简单的,Charles有一个叫做MapLocal的功能,在你要mock的请求上右击就可找到:
MapLocal可以对指定的接口返回使用本地文件进行替换,如这里替换为上文中废话半天生成的数据文件MockTest.json:然后再次刷新页面,看看效果,页面的列表就如愿倍增了,也不用去数据库添加数据,保存一份json文件即测即用即可:
以上,期待大家一起交流,多多指正。
文章为作者独立观点,不代表股票交易接口观点