1 2 3 | 输入:[1,2,3,4] jq 表达式:jq -r 'map(.+1)' 输出:[2,3,4,5] |
1 2 3 4 5 | 输入:[1,2,3,4] 表达式:jq -r 'map(select(.>2))' 输出:[3,4] 表达式:jq -r '.[]|select(.>2)' 输出:3 4 |
1 2 3 4 5 6 7 8 9 | #结果是[1,2,3,4] jq -nr '[1,[2,3],4]|flatten' #结果是[3,2,1] jq -nr '[1,2,3]|reverse' jq -nr '[3,1,2]|sort' jq -nr '[{"a":1},{"a":2}]|sort_by(.a)' #下面两个表达式的结果都是[1,3] jq -nr '"abcb"|indices("b")' jq -nr '[1,3,2,3]|indices(3)' |
1 2 3 4 | #在下面的表达式中变量$arraylen 用来保存数组长度,整个表达式结果为 4 jq -nr '[1,2,3]|length as $arraylen|$arraylen+1' #可以同时定义多个变量 jq -nr '{"firstname":"tom","lastname":"clancy"}|. as {firstnamefn, lastnameln}|"author is "+$fn+"*"+$ln' |
1 2 3 4 5 6 7 8 | #会抛出 arraylen 没定义的异常 jq -nr '[1,2,3]|(length as $arraylen|$arraylen)|$arraylen+1' #正常执行,结果为 4. jq -nr '[1,2,3]|(length as $arraylen|$arraylen+1)' #函数作用域。该表达式会抛出异常,因为变量$fn 是在函数 fname 中定义,对最后一个子表达式##来说,$fn 是不可见的。 jq -nr '{"firstname":"tom","lastname":"clancy"}|def fname:. as {firstnamefn, lastnameln}|$fn; fname|$fn' |
1 2 3 4 | #结果是 6 jq -nr 'reduce ([1,2,3]|.[]) as $item (0; .+$item)' #上面的表达式等同于 jq -nr '0 | (3 as $item|.+$item)|(2 as $item | . + $item)|(1 as $item | . + $item)' |
1 2 | #下面的表达式,结果是 1 3 6 jq -nr 'foreach ([1,2,3]|.[]) as $item (0; .+$item;.)' |
1 2 3 4 5 6 7 | #下面的表达式按照函数的形式调用 first,结果为 1 jq -nr 'first([1,2,3]|.[])' #下面的表达式以 filter 形式调用 first jq -nr '[1,2,3]|.[]|first' #nth 函数的使用,结果为 2 jq -nr 'nth(1;[1,2,3]|.[])' |
1 2 3 | def map(f): [.[] | f]; #下面表达式的结果是 20,因为当作参数传入的表达式在函数 foo 中被引用两次 5|def foo(f): f|f;foo(.*2) |
1 2 3 4 5 6 7 | #下面表达式结果为 10,传入的表达式'.*2'在函数 foo 中首先被求值。 5|def foo(f): f as $f|$f|$f;foo(.*2) #上面的表达式可以简写为如下形式,注意,引用参数时必须带$。 5|def foo($f): $f|$f;foo(.*2) #否则等于直接引用参数中的表达式。 #例如下面的表达式结果为 20 5|def foo($f): $f|f;foo(.*2) |
1 2 | #下面表达式的结果是 15 jq -nr '[1,2,3,4,5]|def total: def _t: .|first+(if length>1 then .[1:]|_t else 0 end); _t;total' |
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |