编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

linux-shell命令处理json数据(linux shell json)

wxchong 2024-08-19 23:57:47 开源技术 16 ℃ 0 评论

0x00 jq介绍

jq是一个轻量级的灵活的处理json对象的命令。支持linux、windows。


0x01 二进制安装

wget -O jq https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux64

chmod +x ./jq

cp jq /usr/bin

0x02 使用yum安装

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字段。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表