深圳网站建设 套餐,广州工商注册官网,平面广告设计主题,昆山做网站的日常工作中#xff0c;我们经常会遇到http请求会返回大量格式固定的数据#xff0c;而我们只需要其中的一部分#xff0c;那么怎么提取我们想要的字段呢。 这里会介绍一种用shell脚本处理http请求返回#xff0c;或者处理json格式数据的方式。 这里我们用到了
jq这个强大的…日常工作中我们经常会遇到http请求会返回大量格式固定的数据而我们只需要其中的一部分那么怎么提取我们想要的字段呢。 这里会介绍一种用shell脚本处理http请求返回或者处理json格式数据的方式。 这里我们用到了
jq这个强大的命令行JSON处理器
使用.data.list选择JSON数据中的list数组。使用map(select(...))对数组中的每个对象进行筛选只保留那些element字段包含/base的对象。使用map(.num)选择每个筛选后对象的num字段。使用add将所有筛选出来的coverageClassTotalNumber相加得到总和。使用-r选项让jq输出原始文本而不是JSON格式的字符串。
if - fi判断语句-ne不等于的判断echo: 输出信息到屏幕语句-z字符串长度为0的判断
例如有一个url这个url的id参数是可支持修改传入的
https://abcdefg.com/api?id$id他的返回为
{status: 200,message: success,data: {total: 80,list: [{element: /base,pid: 1,id: 2,type: 3,num: 11},{element: /handler,pid: 1,id: 29,type: 3,num: 132},.........{element: /dao,pid: 1,id: 89,type: 3,num: 231} ,{element: /runner,pid: 1,id: 89,type: 3,num: 145} ]},timestamp: 1716818758408
}这个返回值的“data”有上千行而我门只需要其中所有element为“/base路径且字段为“num“的值的和。 这时我们就可以用一个shell脚本来实现我们的诉求。
count.sh代码如下
#!/bin/bash # 检查是否提供了参数
if [ -z $1 ]; then echo 请提供参数. exit 1
fi id$1 # URL
urlhttps://abcdefg.com/api?id$id # 发送curl请求并捕获输出到临时文件
curl --location $url --header accept: */* --header accept-language: zh-CN,zh;q0.9 temp_response.json # 检查curl的返回值确保请求成功
if [ $? -ne 0 ]; then echo curl请求失败 exit 1
fi # 使用jq计算符合条件的coverageTotalNumber之和
totalNumber$(jq -r .data.list | map(select(.element | contains(base))) | map(.num) | add temp_response.json) # 检查jq命令是否成功执行
if [ $? -ne 0 ]; then echo jq命令执行失败 exit 1
fi # 打印结果或保存到文件
echo 符合条件的总数为: $totalNumber%
# 如果需要保存到文件可以这样做
echo $totalNumber totalNumber.txt # 清理临时文件
rm temp_response.json可以在终端使用下面命令来执行
sh count.sh 123如果你收到错误 jq: command not found这意味着你的系统中没有安装 jq 工具。jq 是一个强大的命令行 JSON 处理器它允许你解析、过滤、查询和修改 JSON 数据。 为了解决这个问题你需要安装 jq。以下是在不同操作系统上安装 jq 的方法
在 Debian/Ubuntu 系统上安装 jq 使用 apt-get 安装
sudo apt-get update
sudo apt-get install jq在 Red Hat/CentOS 系统上安装 jq 使用 yum 安装对于较新版本的 CentOS可能需要使用 dnf 代替 yum
sudo yum install jq
sudo dnf install jq在 macOS 上安装 jq 使用 Homebrew 安装
/bin/bash -c $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)
brew install jq