jq 速查表
jq速查表包含jq最重要概念、方法等,帮助初学者快速掌握jq。
入门
介绍
jq 就像用于 JSON 数据的 sed - 您可以使用它来切片、过滤、映射和转换结构化数据
安装
$ sudo apt-get install jq # Debian& Ubuntu
$ sudo dnf install jq # Fedora
$ sudo zypper install jq # openSUSE
$ sudo pacman -S jq # Arch
$ brew install jq # macOS & Homebrew
$ port install jq # macOS & MacPorts
语法
$ 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参数,而不是文件 |
-- | 终止参数处理 |
学习示例
获取一个键的值
$ echo '{"foo": 42, "bar": "less interesting data"}' | jq '.foo'
输出结果
42
数组运算
$ echo '[{"name":"JSON", "good":true}, {"name":"XML", "good":false}]' | jq '.[1]'
输出结果
{
"name": "XML",
"good": false
}
构造一个数组/对象
$ echo '{"user":"stedolan","titles":["JQ Primer", "More JQ"]}' | jq '{user, title: .titles[]}'
输出结果
{
"user": "stedolan",
"title": "JQ Primer"
}
{
"user": "stedolan",
"title": "More JQ"
}
计算一个值的长度
$ echo '[[1,2], "string", {"a":2}, null]' | jq '.[] | length'
输出结果
2
6
1
0
取出数组中的键
$ echo '{"abc": 1, "abcd": 2, "Foo": 3}' | jq 'keys'
输出结果
[
"Foo",
"abc",
"abcd"
]
使用多个过滤器
$ echo '{ "foo": 42, "bar": "something else", "baz": true}' | jq '.foo, .bar'
输出结果
42
"something else"
管道传递给下一个过滤器
$ echo '[{"name":"JSON", "good":true}, {"name":"XML", "good":false}]' | jq '.[] | .name'
输出结果
"JSON"
"XML"
条件语句判断
$ echo '[1,5,3,0,7]' | jq 'map(select(. >= 2))'
输出结果
[
5,
3,
7
]
每个输入调用过滤器
$ echo '[1,2,3]' | jq 'map(.+1)'
输出结果
[
2,
3,
4
]
条件判断
$ echo '2' | jq 'if . == 0 then "zero" elif . == 1 then "one" else "many" end'
输出结果
"many"
字符串插入值并进行运算
$ echo '42' | jq '"The input was \(.), which is one less than \(.+1)"'
输出结果
"The input was 42, which is one less than 43"
字符串转 JSON 数组
$ echo 'a b c d' | jq -R 'split(" ")'
输出结果
[
"a",
"b",
"c",
"d"
]
更改发布注册表
echo "$(jq '.publishConfig.registry = "https://npm.pkg.github.com"' package.json)" > package.json
将组织范围添加到包名称
echo "$(jq '.name = "@scope/package"' package.json)" > package.json
声明 定期同步开源项目
reference
评论
欢迎提交文档错误或者建议。提交成功后自己可见,其他用户待审核通过后才可见。
您暂未登录
必须登录后才能使用评论功能(评论、点赞、回复、删除等),请
点击跳转登录
。首次评论仅自己可见,待管理员审核通过后,才会对外发布。