全局
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 和给 | 管道方式

直接打开文件

2)一行显示值

3.2、查找所有键(keys)

3.3、获取env_AB的子键(keys)
| cat t.json | jq ".env_AB| keys" |

3.4、获取子键(keys) ,去掉 [] 方括号
| cat t.json | jq ".env_AB| keys[] " |

3.5.显示所有子值(value)
| cat t.json | jq '.env_AB[]' |

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

3.6、去掉所有值 的双引号
| cat t.json | jq -r .env_AB[] |
或
| cat t.json | jq .env_AB[] | sed 's/\"//g' |

3.7、统计键值总数

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

3.8、获取指定键的值
| cat t.json | jq ".env_AB.DB_PATH" |

3.9、获取元素类型
| cat t.json | jq ".env_AB| type" |

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]


3.11、获取 json 中所有 key 和 value
| cat t.json | jq 'to_entries|map("\(.key)=\(.value|tostring)")|.[]' |

3.12、取 [] 方括号数组 Obgect
https://www.cnblogs.com/v5captain/p/16932237.html
| cat t.json | jq '.env_AB.RULE_DB[0]' |

3.13、取 [] 方括号数组 Obgect 第一个 RULE_DB_1 键的值
| cat t.json | jq '.env_AB.RULE_DB[0].RULE_DB_1' |

四、示例
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
| { |
| "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[]' |

六、示例
6.1、文件内容
https://www.jb51.net/jiaoben/292780fu4.htm
| [{ |
| "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 |

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

6.2、累加所有的 age 总数
| jq 'reduce .[] as $item (0; . + $item.age)' t2.json |

6.3、sort_by 按 .age 内容排序
| jq 'sort_by(.age)' t2.json |
age 的值 18、19、20 带双引号 和 不带双引号 都可以排序

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

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

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

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

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

七、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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!