VueMastery

来源
步骤
由于我是win11系统的,接下来我以win11的安装配置为例,介绍jq的配置与使用。
jq官网下载对应的.exe的可执行程序。cmd使用的话,将jq.exe文件所在目录添加到系统环境变量;git bash使用的话,为jq.exe添加软链接符号到/bin环境中。$ ln -s -f e:/cli/jq.exe /bin
$ ls /bin | grep jq[
{
"name": "张三",
"age": 20,
"address": {
"privence": "广东省",
"city": "广州市"
},
"hobby": ["读书", "听音乐"]
},
{
"name": "李四",
"age": 25,
"address": {
"privence": "浙江省",
"city": "杭州市"
},
"hobby": ["唱跳rap", "游泳"]
},
{
"name": "小青",
"age": 18,
"address": {
"privence": "河南省",
"city": "开封市"
},
"hobby": ["旅游", "爬山"]
}
]$ cat data.json | jq .$ cat data.json | jq '.[0]'{
"name": "张三",
"age": 20,
"address": {
"privence": "广东省",
"city": "广州市"
},
"hobby": [
"读书",
"听音乐"
]
}注意
接下来的命令中,我们将省去展示数据输入的前缀命令cat data.json | 或者远程方式请求的数据输入例如curl'https://api.github.com/repos/jqlang/jq/commits?per_page=5' |,因为它是不变的,这样避免命令过长。
jq '.'和jq '.[]'的输出结果不一样,前者输出是所有对象的数组,后者输出数组中的每个对象。
$ jq '.[]'{
"name": "张三",
"age": 20,
"address": {
"privence": "广东省",
"city": "广州市"
},
"hobby": [
"读书",
"听音乐"
]
}
{
"name": "李四",
"age": 25,
"address": {
"privence": "浙江省",
"city": "杭州市"
},
"hobby": [
"唱跳rap",
"游泳"
]
}
{
"name": "小青",
"age": 18,
"address": {
"privence": "河南省",
"city": "开封市"
},
"hobby": [
"旅游",
"爬山"
]
}$ jq '.[] | { name: .name , age: .age }'{
"name": "张三",
"age": 20
}
{
"name": "李四",
"age": 25
}
{
"name": "小青",
"age": 18
}
.[]返回的数组的每个元素,每次一个,这些元素都被输入到后面的过滤器安装{ name: .name, age: .age}进行格式化处理。
将过滤器括在方括号
[]中来告诉jq收集所有结果。
$ jq '[.[] | { name: .name , age: .age }]'[
{
"name": "张三",
"age": 20
},
{
"name": "李四",
"age": 25
},
{
"name": "小青",
"age": 18
}
]$ jq '[.[] | { name: .name, addresses: [.address.privence]}]'
$ jq '[.[] | { name: .name, addresses: [.address | .privence], hobby: .hobby[0]}]'[
{
"name": "张三",
"addresses": [
"广东省"
]
},
{
"name": "李四",
"addresses": [
"浙江省"
]
},
{
"name": "小青",
"addresses": [
"河南省"
]
}
]# 起始索引是0可以省略, 两者等价
$ jq '[.[] | { name: .name, addresses: [.address | .privence], hobby: .hobby[0:2]}]'
$ jq '[.[] | { name: .name, addresses: [.address | .privence], hobby: .hobby[:2]}]'$ jq '.[] | .name, .age'"张三"
20
"李四"
25
"小青"
18归纳
.[](当前值本身就是数组)表示遍历数组,如果.fieldname[]表示将对象中某个字段的数组进行遍历。[]表示收集元素放到一个列表里。.[index]获取数组中具体索引的元素,索引从0开始。.[]表示返回数组中的所有元素。|表示将上一个值传递给后面的过滤器。.foo?表示获取对象中foo字段的值,如果对象中不存在foo字段,则返回null,不会引起报错。.[]?表示尝试遍历数组,但如果 不是数组或对象,则不会输出任何错误。