jq
一个灵活的轻量级命令行JSON处理器
补充说明
jq 是 stedolan 开发的一个轻量级的和灵活的命令行JSON处理器,源码请参考 jq 项目主页
jq 用于处理JSON输入,将给定过滤器应用于其JSON文本输入并在标准输出上将过滤器的结果生成为JSON。
最简单的过滤器是.
,它将jq的输入未经修改地复制到其输出中(格式设置除外)。
请注意,jq 当前仅支持64位双精度浮点数(IEEE754)。
安装
1# Debian系,如 Ubuntu
2sudo apt-get install jq
3
4# RedHat系, 如 CentOS
5yum install jq
语法
1jq [options] <jq filter> [file...]
2jq [options] --args <jq filter> [strings...]
3jq [options] --jsonargs <jq filter> [JSON_TEXTS...]
选项
1-c 紧凑而不是漂亮的输出;
2-n 使用`null`作为单个输入值;
3-e 根据输出设置退出状态代码;
4-s 将所有输入读取(吸取)到数组中;应用过滤器;
5-r 输出原始字符串,而不是JSON文本;
6-R 读取原始字符串,而不是JSON文本;
7-C 为JSON着色;
8-M 单色(不要为JSON着色);
9-S 在输出上排序对象的键;
10--tab 使用制表符进行缩进;
11--arg a v 将变量$a设置为value<v>;
12--argjson a v 将变量$a设置为JSON value<v>;
13--slurpfile a f 将变量$a设置为从<f>读取的JSON文本数组;
14--rawfile a f 将变量$a设置为包含<f>内容的字符串;
15--args 其余参数是字符串参数,而不是文件;
16--jsonargs 其余的参数是JSON参数,而不是文件;
17-- 终止参数处理;
例子
.
: 以漂亮的方式输出
1$ echo '{ "foo": { "bar": { "baz": 123 } } }' | jq '.'
2{
3 "foo": {
4 "bar": {
5 "baz": 123
6 }
7 }
8}
.foo, .foo.bar, .foo?
: 获取一个键的值
1$ echo '{"foo": 42, "bar": "less interesting data"}' | jq '.foo'
242
.[], .[]?, .[2], .[10:15]
: 数组运算
1$ echo '[{"name":"JSON", "good":true}, {"name":"XML", "good":false}]' | jq '.[1]'
2{
3 "name": "XML",
4 "good": false
5}
[], {}
: 构造一个数组/对象
1$ echo '{"user":"stedolan","titles":["JQ Primer", "More JQ"]}' | jq '{user, title: .titles[]}'
2
3{
4 "user": "stedolan",
5 "title": "JQ Primer"
6}
7{
8 "user": "stedolan",
9 "title": "More JQ"
10}
length
: 计算一个值的长度
1$ echo '[[1,2], "string", {"a":2}, null]' | jq '.[] | length'
22
36
41
50
keys
: 取出数组中的键
1$ echo '{"abc": 1, "abcd": 2, "Foo": 3}' | jq 'keys'
2[
3 "Foo",
4 "abc",
5 "abcd"
6]
,
: 使用多个过滤器
1$ echo '{ "foo": 42, "bar": "something else", "baz": true}' | jq '.foo, .bar'
242
3"something else"
|
: 通过管道将一个过滤器的输出当做下一个过滤器的输入
1$ echo '[{"name":"JSON", "good":true}, {"name":"XML", "good":false}]' | jq '.[] | .name'
2"JSON"
3"XML"
select(foo)
: 如果foo返回true,则输入保持不变
1$ echo '[1,5,3,0,7]' | jq 'map(select(. >= 2))'
2[
3 5,
4 3,
5 7
6]
map(foo)
: 每个输入调用过滤器
1$ echo '[1,2,3]' | jq 'map(.+1)'
2[
3 2,
4 3,
5 4
6]
if-then-else-end
: 条件判断
1 $ echo '2' | jq 'if . == 0 then "zero" elif . == 1 then "one" else "many" end'
2
3"many"
\(foo)
: 在字符串中插入值并进行运算
1$ echo '42' | jq '"The input was \(.), which is one less than \(.+1)"'
2
3"The input was 42, which is one less than 43"
来源:https://github.com/jaywcjlove/linux-command
最后修改于: Wednesday, January 31, 2024
版权申明:
- 未标注来源的内容全部为原创,未经授权请勿转载(因转载后排版往往错乱、内容不可控、无法持续更新等);
- 非营利为目的,演绎本博客任何内容,请以'原文出处'或者'参考链接'等方式给出本站相关网页地址(方便读者)。