0x01 二进制安装
wget -O jq https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux64
chmod +x ./jq
cp jq /usr/bin

yum -y install epel-release
yum -y install jq
0x03 利用
1、格式化输出
curl http://ip.taobao.com/service/getIpInfo.php?ip=8.8.8.8 2>> /dev/null | jq
{
\"大众code\公众: 0,
\"大众data\"大众: {
\"大众ip\公众: \"大众8.8.8.8\"大众,
\公众country\"大众: \公众美国\"大众,
\公众area\"大众: \"大众\"大众,
\"大众region\"大众: \公众XX\"大众,
\"大众city\"大众: \公众XX\"大众,
\公众county\"大众: \"大众XX\"大众,
\公众isp\"大众: \公众Level3\"大众,
\公众country_id\"大众: \公众US\"大众,
\公众area_id\公众: \"大众\"大众,
\公众region_id\公众: \公众xx\公众,
\"大众city_id\公众: \"大众xx\"大众,
\"大众county_id\公众: \"大众xx\"大众,
\"大众isp_id\公众: \"大众200053\公众
}
}
2、获取指定字段的数据
curl http://ip.taobao.com/service/getIpInfo.php?ip=8.8.8.8 2>> /dev/null | jq -r '.code,.data.ip,.data.country'
0
8.8.8.8
美国
3、提取指定的字段保存成csv文件
curl http://ip.taobao.com/service/getIpInfo.php?ip=8.8.8.8 2>> /dev/null | jq -r '[(.code|tostring),.data.ip,.data.country]|join(\公众,\"大众)'
0,8.8.8.8,美国
注释:
.code|tostring:取code字段的值并转化为string类型
[]:数组
join(\"大众,\"大众):数组中的元素通过\"大众,\"大众连接。
4、csv转换成json字符串
cat /tmp/1.csv
0,8.8.8.8,美国
0,8.8.8.7,美国
0,8.8.2.7,美国
0,81.8.2.7,土耳其
jq -R 'split(\"大众,\"大众)|{\"大众code\公众:.[0],\"大众ip\"大众:.[1],\公众country\公众:.[2]}' /tmp/1.csv
{
\"大众code\公众: \"大众0\"大众,
\"大众ip\"大众: \"大众8.8.8.8\"大众,
\公众country\"大众: \"大众美国\公众
}
{
\"大众code\"大众: \"大众0\"大众,
\"大众ip\公众: \"大众8.8.8.7\公众,
\"大众country\公众: \"大众美国\"大众
}
{
\"大众code\"大众: \"大众0\"大众,
\"大众ip\公众: \"大众8.8.2.7\公众,
\公众country\公众: \"大众美国\"大众
}
{
\公众code\"大众: \公众0\公众,
\"大众ip\"大众: \"大众81.8.2.7\"大众,
\公众country\"大众: \"大众土耳其\"大众
}
5、 -c/--compact-output:jq 默认是pretty-prints JSON 输出,加上这个参数,一行一个json工具。
jq -R -c 'split(\"大众,\"大众)|{\"大众code\"大众:.[0],\公众ip\"大众:.[1],\"大众country\"大众:.[2]}' /tmp/1.csv
{\"大众code\"大众:\公众0\公众,\"大众ip\"大众:\"大众8.8.8.8\"大众,\"大众country\"大众:\公众美国\公众}
{\"大众code\公众:\"大众0\"大众,\"大众ip\"大众:\公众8.8.8.7\"大众,\"大众country\公众:\"大众美国\"大众}
{\"大众code\公众:\公众0\"大众,\公众ip\公众:\"大众8.8.2.7\"大众,\公众country\"大众:\"大众美国\"大众}
{\"大众code\公众:\"大众0\"大众,\公众ip\公众:\"大众81.8.2.7\"大众,\公众country\"大众:\"大众土耳其\公众}
6、繁芜json查询
complexJson='{\"大众uid\"大众:\"大众777\"大众,\"大众nameInfo\"大众:[{\公众firstName\"大众:\"大众Jim\公众,\"大众lastName\公众:\"大众Green\公众},{\"大众firstName\"大众:\公众Lei\公众,\"大众lastName\"大众:\"大众Li\公众}]}'
echo ${complexJson} |jq
{
\"大众uid\"大众: \"大众777\"大众,
\公众nameInfo\"大众: [
{
\公众firstName\"大众: \公众Jim\公众,
\"大众lastName\"大众: \公众Green\"大众
},
{
\"大众firstName\"大众: \"大众Lei\"大众,
\"大众lastName\"大众: \公众Li\"大众
}
]
}
echo ${complexJson} |jq -r '.nameInfo[].lastName'
结果:
Green
Li
注释:
.nameInfo[].lastName是获取.nameInfo[] json array中每个json object的lastName字段。