前言
看到公司大佬用命令行操作 JSON,着实很秀,想起自己操作 JSON 要么用在线文档,要么用本地工具,非常之 low。
一个真实案例:有一个比较大的 JSON 数组(大概是这个格式:[{..},{..}..]
),我和大佬要查数组内所有字典的相同 key 下是否存在重复的 value,然后我还在思考怎么做效率比较高,大佬已经查完了,只用了大概几秒钟的时间。接着他给我发了一张截图,我看到截图上的 jq 命令,脑袋里全是问号?jq 是啥?貌似没一点印象?确实没印象!于是开始了解 jq 命令行工具,这里简单记录下,非常感谢大佬打破菜鸡的认知水平。
安装过程稍微有点慢,如果这个时候有报错,大概率是本地环境问题。
- 安装完之后,准备好一个 JSON 文件,或者直接命令行创建也可以:
1
|
echo '[{"name": "张三","sex": true},{"name": "李四","sex": true},{"name": "王五","sex": true},{"name": "赵六","sex": true},{"name": "孙七","sex":false}]' > ./test.json
|
使用方法
1
2
3
4
|
// 表达式 ".",不改变输入,可以将其优美地输出
cat ./test.json | jq .
// 紧凑型输出
cat ./test.json | jq -c .
|
1
2
3
4
5
6
7
8
9
10
|
// 属性列表
cat ./test.json | jq '.[] | .name'
// 计数
cat ./test.json | jq '.[] | .name' | wc -l
// 去重计数
cat ./test.json | jq '.[] | .name' | uniq | wc -l
// 条件查询
cat ./test.json | jq '.[] | select(.sex == true)'
// 根据索引取第一个元素
cat ./test.json | jq '.[0]'
|
|
是管道线的意思,把前面命令的输出当作是后面命令的输入。如上第一个属性列表
命令把 .[]
作为输入,进而访问嵌套的属性 .name
,打印结果见下图:
总结
jq 是一个效率很高的 JSON 处理工具,使用起来也非常简单方便,我这里只简单记录下常用的功能,一般的 JSON 处理需求之后都可以使用 jq。
今日心得:jq 只是一个缩影,要学习的东西还非常多,加油吧少年!
参考博客