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: 累加


三、示例

3.1、显示所有值

1)以方便阅读形式显示

cat t.json | jq

用 cat 和给 | 管道方式
image


jq . t.json

直接打开文件
image


2)一行显示值

cat t.json | jq -c

image


3.2、查找所有键(keys)

cat t.json | jq 'keys'

image


3.3、获取env_AB的子键(keys)

cat t.json | jq ".env_AB| keys"

image


3.4、获取子键(keys) ,去掉 [] 方括号

cat t.json | jq ".env_AB| keys[] "

image


3.5.显示所有子值(value)

cat t.json | jq '.env_AB[]'

image


cat t.json | jq '.env_AB'

image


3.6、去掉所有值 的双引号

cat t.json | jq -r .env_AB[]

cat t.json | jq .env_AB[] | sed 's/\"//g'

image


3.7、统计键值总数

cat t.json | jq length

image


cat t.json | jq ".env_AB | length"

image


3.8、获取指定键的值

cat t.json | jq ".env_AB.DB_PATH"

image


3.9、获取元素类型

cat t.json | jq ".env_AB| type"

image


3.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]
image

image


3.11、获取 json 中所有 key 和 value

cat t.json | jq 'to_entries|map("\(.key)=\(.value|tostring)")|.[]'

image


3.12、取 [] 方括号数组 Obgect

https://www.cnblogs.com/v5captain/p/16932237.html

cat t.json | jq '.env_AB.RULE_DB[0]'

image


3.13、取 [] 方括号数组 Obgect 第一个 RULE_DB_1 键的值

cat t.json | jq '.env_AB.RULE_DB[0].RULE_DB_1'

image


四、示例

4.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"
}

五、示例

5.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"
}

5.2、显示所有键

cat t1.json | jq -r 'keys[]'

image


六、示例

6.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 (数字)类型。
字符串,不可以进行加减法运算
数字, 可以进行加减法运算


6.1、要将数组中的所有年龄加1

jq 'map(.age + 1)' t2.json

image

age 的值 18、19、20 带双引号,执行就会报错(提示是 string 类型)
image


6.2、累加所有的 age 总数

jq 'reduce .[] as $item (0; . + $item.age)' t2.json

image


6.3、sort_by 按 .age 内容排序

jq 'sort_by(.age)' t2.json

age 的值 18、19、20 带双引号 和 不带双引号 都可以排序
image


6.4、数组切片:显示前两个

jq '.[:2]' t2.json

image


6.5、数组切片:不显示后两个

jq '.[:-2]' t2.json

image


6.6、数组切片:显示第2个以后的

jq '.[2:]' t2.json

image


6.7、数组切片:显示倒数 第一个

jq '.[-1:]' t2.json

image


6.8、数组切片:显示 第0个到 第1个

jq '.[0:2]' t2.json

image


七、null值处理

7.1 使用默认值

如果你希望在字段值为null时使用一个默认值,你可以使用jq的//运算符。例如,假设你有以下JSON数据:

{
"name": "Alice",
"age": null
}

你可以这样使用jq来设置一个默认值(比如"unknown")给age字段:

echo '{"name": "Alice", "age": null}' | jq '.age // "unknown"'

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
https://www.baidu.com/s?ie=UTF-8&wd=shell+jq命令null&tn=98012088_21_dg&ch=1



posted @   悟透  阅读(3167)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示