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
{
\公众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字段。