这个快速参考备忘单提供了使用 jq 命令的各种方法。
入门
介绍
jq 就像用于 JSON 数据的 sed - 您可以使用它来切片、过滤、映射和转换结构化数据
安装
1 2 3 4 5 6
| $ sudo apt-get install jq $ sudo dnf install jq $ sudo zypper install jq $ sudo pacman -S jq $ brew install jq $ port install jq
|
语法
1 2 3
| $ jq [options] <jq filter> [file...] $ jq [options] --args <jq filter> [strings...] $ jq [options] --jsonargs <jq filter> [JSON_TEXTS...]
|
选项
:- |
- |
-c |
紧凑而不是漂亮的输出 |
-n |
使用null 作为单个输入值 |
-e |
根据输出设置退出状态代码 |
-s |
将所有输入读取(吸取)到数组中;应用过滤器 |
-r |
输出原始字符串,而不是JSON文本 |
-R |
读取原始字符串,而不是JSON文本 |
-C |
为 JSON 着色 |
-M |
单色(不要为JSON着色) |
-S |
在输出上排序对象的键 |
--tab |
使用制表符进行缩进 |
--arg a v |
将变量 $a 设置为 value <v> |
--argjson a v |
将变量 $a 设置为 JSON value <v> |
--slurpfile a f |
将变量 $a 设置为从<f> 读取的JSON文本数组 |
--rawfile a f |
将变量 $a 设置为包含<f> 内容的字符串 |
--args |
其余参数是字符串参数,而不是文件 |
--jsonargs |
其余的参数是JSON参数,而不是文件 |
-- |
终止参数处理 |
学习示例
获取一个键的值
1
| $ echo '{"foo": 42, "bar": "less interesting data"}' | jq '.foo'
|
输出结果
数组运算
1
| $ echo '[{"name":"JSON", "good":true}, {"name":"XML", "good":false}]' | jq '.[1]'
|
输出结果
1 2 3 4
| { "name": "XML", "good": false }
|
构造一个数组/对象
1
| $ echo '{"user":"stedolan","titles":["JQ Primer", "More JQ"]}' | jq '{user, title: .titles[]}'
|
输出结果
1 2 3 4 5 6 7 8
| { "user": "stedolan", "title": "JQ Primer" } { "user": "stedolan", "title": "More JQ" }
|
计算一个值的长度
1
| $ echo '[[1,2], "string", {"a":2}, null]' | jq '.[] | length'
|
输出结果
取出数组中的键
1
| $ echo '{"abc": 1, "abcd": 2, "Foo": 3}' | jq 'keys'
|
输出结果
1 2 3 4 5
| [ "Foo", "abc", "abcd" ]
|
使用多个过滤器
1
| $ echo '{ "foo": 42, "bar": "something else", "baz": true}' | jq '.foo, .bar'
|
输出结果
管道传递给下一个过滤器
1
| $ echo '[{"name":"JSON", "good":true}, {"name":"XML", "good":false}]' | jq '.[] | .name'
|
输出结果
条件语句判断
1
| $ echo '[1,5,3,0,7]' | jq 'map(select(. >= 2))'
|
输出结果
每个输入调用过滤器
1
| $ echo '[1,2,3]' | jq 'map(.+1)'
|
输出结果
条件判断
1
| $ echo '2' | jq 'if . == 0 then "zero" elif . == 1 then "one" else "many" end'
|
输出结果
字符串插入值并进行运算
1
| $ echo '42' | jq '"The input was \(.), which is one less than \(.+1)"'
|
输出结果
1
| "The input was 42, which is one less than 43"
|
字符串转 JSON 数组
1
| $ echo 'a b c d' | jq -R 'split(" ")'
|
输出结果
1 2 3 4 5 6
| [ "a", "b", "c", "d" ]
|
更改发布注册表
1
| echo "$(jq '.publishConfig.registry = "https://npm.pkg.github.com"' package.json)" > package.json
|
将组织范围添加到包名称
1
| echo "$(jq '.name = "@scope/package"' package.json)" > package.json
|
另见