shell jq命令,解析 json 文件
全局
cat t.json
{
"env_AB":{
"DB_PATH":"/bin/data",
"DB_NAME":"aa.db",
"RULE_DB":[
{
"RULE_DB_1":"bb_rules1.db",
"RULE_DB_2":"bb_rules2.db",
"RULE_DB_3":"bb_rules3.db",
"RULE_DB_4":"bb_rules4.db"
}
]
}
}
一、参数说明
-r: 去掉结果中的 " 双引号
-c: 在一行显示
二、函数说明
length: 统计键(值)总数
type: 获取元素类型
to_entries: 条目
map:数组中的元素进行映射转换
to_entries:
from_entries:
keys: 查找json中所有的键, 默认获取第一层键,指定键则获取子键
has:用来是判断是否存在某个key
sort_by: 数组排序
reduce: 累加
三、示例
1、显示所有值
1)以方便阅读形式显示
cat t.json | jq
用 cat 和给 | 管道方式
jq . t.json
直接打开文件
2)一行显示值
cat t.json | jq -c
2、查找所有键(keys)
cat t.json | jq 'keys'
3、获取env_AB的子键(keys)
cat t.json | jq ".env_AB| keys"
4、获取子键(keys) ,去掉 [] 方括号
cat t.json | jq ".env_AB| keys[] "
5.显示所有子值(value)
cat t.json | jq '.env_AB[]'
cat t.json | jq '.env_AB'
6、去掉所有值 的双引号
cat t.json | jq -r .env_AB[]
7、统计键值总数
cat t.json | jq length
cat t.json | jq ".env_AB | length"
8、获取指定键的值
cat t.json | jq ".env_AB.DB_PATH"
9、获取元素类型
cat t.json | jq ".env_AB| type"
10、取 [] 方括号中的值
cat t.json | jq ".env_AB.RULE_DB[]"
或
cat t.json | jq ".env_AB.RULE_DB[0]"
json文件中 env_AB里只有一个带方括号的 RULE_DB ,因为 json 是从0开始,所以是写 [0]
11、获取 json 中所有 key 和 value
cat t.json | jq 'to_entries|map("\(.key)=\(.value|tostring)")|.[]'
12、取 [] 方括号数组 Obgect
https://www.cnblogs.com/v5captain/p/16932237.html
cat t.json | jq '.env_AB.RULE_DB[0]'
13、取 [] 方括号数组 Obgect 第一个 RULE_DB_1 键的值
cat t.json | jq '.env_AB.RULE_DB[0].RULE_DB_1'
四、示例
1、key 和 value 的值组合
http://www.manongjc.com/detail/32-jaokxamdvlhombq.html
https://www.cnblogs.com/yangxinrui/p/16314070.html
1)文件内容
cat 1.json | jq to_entries
[
{
"key": "honesty",
"value": "Apple Jack"
},
{
"key": "laughter",
"value": "Pinkie Pie"
},
{
"key": "loyalty",
"value": "Rainbow Dash"
}
]
2)用函数执行结果
cat 1.json | jq to_entries | jq from_entries
{
"honesty": "Apple Jack",
"laughter": "Pinkie Pie",
"loyalty": "Rainbow Dash"
}
五、示例
1、文件内容
https://www.nuomiphp.com/eplan/226372.html
cat t1.json
{
"Archiver-Version": "Plexus Archiver",
"Build-Id": "",
"Build-Jdk": "1.7.0_07",
"Build-Number": "",
"Build-Tag": "",
"Built-By": "cporter",
"Created-By": "Apache Maven",
"Implementation-Title": "northstar",
"Implementation-Vendor-Id": "com.test.testPack",
"Implementation-Version": "testBox",
"Manifest-Version": "1.0",
"appname": "testApp",
"build-date": "02-03-2014-13:41",
"version": "testBox"
}
2、显示所有键
cat t1.json | jq -r 'keys[]'
六、示例
1、文件内容
https://www.jb51.net/jiaoben/292780fu4.htm
cat t2.json
[{
"id": "1",
"name": "zhangsan",
"age": 18
}, {
"id": "2",
"name": "lisi",
"age": 19
}, {
"id": "3",
"name": "wangwu",
"age": 20
}]
注意: age 的值 18、19、20 带双引号是 string(字符串)类型; 不带双引号是 num (数字)类型。
字符串,不可以进行加减法运算
数字, 可以进行加减法运算
1、要将数组中的所有年龄加1
jq 'map(.age + 1)' t2.json
age 的值 18、19、20 带双引号,执行就会报错(提示是 string 类型)
2、累加所有的 age 总数
jq 'reduce .[] as $item (0; . + $item.age)' t2.json
3、sort_by 按 .age 内容排序
jq 'sort_by(.age)' t2.json
age 的值 18、19、20 带双引号 和 不带双引号 都可以排序
4、数组切片:显示前两个
jq '.[:2]' t2.json
5、数组切片:不显示后两个
jq '.[:-2]' t2.json
6、数组切片:显示第2个以后的
jq '.[2:]' t2.json
7、数组切片:显示倒数 第一个
jq '.[-1:]' t2.json
8、数组切片:显示 第0个到 第1个
jq '.[0:2]' t2.json
1、
参考、来源:
https://www.jianshu.com/p/98b1b3ce2e29 (图文说明大全)
https://blog.csdn.net/victoria_hong/article/details/78884884
https://wenku.csdn.net/answer/950342be2ab949b2889f2b894c2b0883
https://tool.4xseo.com/a/1616.html