1.格式化后原样输出,身份运算符: '.'
# echo '{ "foo": { "bar": { "baz": 123 } } }' |jq '.'
{
"foo": {
"bar": {
"baz": 123
}
}
}
2. 获取key的值:'.key-name'
# echo '{"foo": 42, "bar": "less interesting data"}'|jq '.foo'
42
3.多次操作输入: ','
# echo '{ "foo": 42, "bar": "something else", "baz": true}'|jq '.foo, .bar'
42
"something else"
4.操作数组:.[] 、.[]? 、.[1] 、.[10:15]
# echo '[{"name":"JSON", "good":true}, {"name":"XML", "good":false}]' |jq '.[1]'
{
"name": "XML",
"good": false
}
# .[]? 用于如果输入的不是数组[]或对象{} 它不会输出错误
# echo '[{"name":"JSON", "good":true}, {"name":"XML", "good":false}]' |jq '.[]?'
{
"name": "JSON",
"good": true
}
{
"name": "XML",
"good": false
}
# 返回数组的所有元素,并且每个值是单独的结果。也可以在对象上使用它,它将返回对象的所有值
# echo '[{"name":"JSON", "good":true}, {"name":"XML", "good":false}]' |jq '.[]'
{
"name": "JSON",
"good": true
}
{
"name": "XML",
"good": false
}
# echo '{"a": 1, "b": 1,"c":2}'|jq '.[]'
1
1
2
# echo '[{"name":"JSON", "good":true}, {"name":"XML", "good":false}]' |jq '.[0:1]'
[
{
"name": "JSON",
"good": true
}
]
# echo '[{"name":"JSON", "good":true}, {"name":"XML", "good":false}]' |jq '.[0:2]'
[
{
"name": "JSON",
"good": true
},
{
"name": "XML",
"good": false
}
]
5.使用管道连接过滤器:'.[]|.name'
# 管道 | 连接前一个过滤器的输出变为后一个过滤器的输入
# echo '[{"name":"JSON", "good":true}, {"name":"XML", "good":false}]'|jq '.[]|.name'
"JSON"
"XML"
6. 为每个输入值都调用过滤器:map(foo)
#array里面的每个值都+1
#echo '[1,2,3]'|jq 'map(.+1)'
[
2,
3,
4
]
7. 过滤器 select(boolean_expression) 当表达式为真才输出对应的值
# echo '[1,5,3,0,7]'|jq 'map(select(.>2))'
[
5,
3,
7
]
# echo '[{"id": "first", "val": 1}, {"id": "second", "val": 2}]'|jq '.[] | select(.id == "second")'
{
"id": "second",
"val": 2
}
8. 构造数组或对象:[] 、{}
#数组
# echo '{"user":"stedolan", "projects": ["jq", "wikiflow"]}'|jq '[.user, .projects[]]'
[
"stedolan",
"jq",
"wikiflow"
]
#对象 {}
#()作为表达式有先运算的优先级
# echo '{"user":"stedolan", "projects": ["jq", "wikiflow"]}'|jq '{(.user):.projects}'
{
"stedolan": [
"jq",
"wikiflow"
]
}
# echo '{"user":"stedolan", "projects": ["jq", "wikiflow"]}'|jq '{user,projects:.projects}'
{
"user": "stedolan",
"projects": [
"jq",
"wikiflow"
]
}
# echo '{"user":"stedolan", "projects": ["jq", "wikiflow"]}'|jq '{user,projects}'
{
"user": "stedolan",
"projects": [
"jq",
"wikiflow"
]
}
# echo '{"user":"stedolan", "projects": ["jq", "wikiflow"]}'|jq '{user,projects:.projects[]}'
{
"user": "stedolan",
"projects": "jq"
}
{
"user": "stedolan",
"projects": "wikiflow"
}
# echo '{"user":"stedolan", "projects": ["jq", "wikiflow"]}'|jq '{aaa:.user,bbb:.projects}'
{
"aaa": "stedolan",
"bbb": [
"jq",
"wikiflow"
]
}
# echo '{"user":"stedolan", "projects": ["jq", "wikiflow"]}'|jq '{aaa:.user}'
{
"aaa": "stedolan"
}
9. 获取值(对象,数组,字符等)的长度 length
# echo '[[1,2], "string", {"a":2}, null]'|jq '.[] | length'
2
6
1
0
# echo '{"user":"stedolan", "projects": ["jq", "wikiflow"]}'|jq 'length'
2
10 . 获取key名称 keys
# echo '{"abc": 1, "abcd": 2, "Foo": 3}'|jq 'keys'
[
"Foo",
"abc",
"abcd"
]
#按unicode代码点顺序, “按字母顺序”排序
# echo '{"abc": 1, "abcd": 2, "Foo": 3}'|jq 'keys[0]'
"Foo"
# echo '{"abc": 1, "abcd": 2, "Foo": 3}'|jq 'keys[1]'
"abc"
# echo '{"abc": 1, "abcd": 2, "Foo": 3}'|jq 'keys[2]'
"abcd"
11. 条件判断 if-then-else-end
# echo 2 |jq 'if . == 0 then "zero" elif . == 1 then "one" else "many" end'
"many"
# echo '{"a":1,"b":2}' | jq 'if .|length == 0 then "zero" elif .|length == 1 then "one" elif .|length == 2 then "two" else "other" end'
"two"
12. 在字符串里插入值: \(foo)
# echo 42 | jq '"The input was \(.), which is one less than \(.+1)"'
"The input was 42, which is one less than 43"
13. 判断类型: type
# echo '[0, false, [], {}, null, "hello"]'|jq 'map(type)'
[
"number",
"boolean",
"array",
"object",
"null",
"string"
]