jq
一个灵活的轻量级命令行JSON处理器
补充说明
jq 是 stedolan 开发的一个轻量级的和灵活的命令行JSON处理器,源码请参考 jq 项目主页
jq 用于处理JSON输入,将给定过滤器应用于其JSON文本输入并在标准输出上将过滤器的结果生成为JSON。
最简单的过滤器是.
,它将jq的输入未经修改地复制到其输出中(格式设置除外)。
请注意,jq 当前仅支持64位双精度浮点数(IEEE754)。
安装
1 | # Debian系,如 Ubuntu |
语法
1 | jq [options] <jq filter> [file...] |
选项
1 | -c 紧凑而不是漂亮的输出; |
例子
.
: 以漂亮的方式输出
1 | $ echo '{ "foo": { "bar": { "baz": 123 } } }' | jq '.' |
.foo, .foo.bar, .foo?
: 获取一个键的值
1 | $ echo '{"foo": 42, "bar": "less interesting data"}' | jq '.foo' |
.[], .[]?, .[2], .[10:15]
: 数组运算
1 | $ echo '[{"name":"JSON", "good":true}, {"name":"XML", "good":false}]' | jq '.[1]' |
[], {}
: 构造一个数组/对象
1 | $ echo '{"user":"stedolan","titles":["JQ Primer", "More JQ"]}' | jq '{user, title: .titles[]}' |
length
: 计算一个值的长度
1 | $ echo '[[1,2], "string", {"a":2}, null]' | jq '.[] | length' |
keys
: 取出数组中的键
1 | $ echo '{"abc": 1, "abcd": 2, "Foo": 3}' | jq 'keys' |
,
: 使用多个过滤器
1 | $ echo '{ "foo": 42, "bar": "something else", "baz": true}' | jq '.foo, .bar' |
|
: 通过管道将一个过滤器的输出当做下一个过滤器的输入
1 | $ echo '[{"name":"JSON", "good":true}, {"name":"XML", "good":false}]' | jq '.[] | .name' |
select(foo)
: 如果foo返回true,则输入保持不变
1 | $ echo '[1,5,3,0,7]' | jq 'map(select(. >= 2))' |
map(foo)
: 每个输入调用过滤器
1 | $ echo '[1,2,3]' | jq 'map(.+1)' |
if-then-else-end
: 条件判断
1 | $ echo '2' | jq 'if . == 0 then "zero" elif . == 1 then "one" else "many" end' |
\(foo)
: 在字符串中插入值并进行运算
1 | $ echo '42' | jq '"The input was \(.), which is one less than \(.+1)"' |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ITCENT' Blog!