使用 jq 范围变量输入新的 jq 过滤器
Use a jq range variable to feed into a new jq filter
我有一些 JSON 看起来像这样:
{
"vertices": [
{
"id": 71597,
"ns": "ca",
"alias": "polarized"
},
{
"id": 129748,
"ns": "av",
"name": "Polarized"
},
{
"id": 129898,
"ns": "av",
"name": "False"
}
],
"edgeGroups": {
"hasAttributeValue": [
[
0,
1
],
[
0,
2
]
]
}
}
.vertices
中的各个条目通过它们的数组索引相关联。因此,在这种情况下,第一个顶点(id:71597 - 数组索引为 0)的属性值为 129748 和 129898(数组索引分别为 1 和 2)。
我可以使用以下 jq 过滤器获取正在搜索的属性的数组索引:
.vertices | range(0;length) as $i | select(.[$i].alias=="polarized" and .[$i].ns=="ca") | $i
returns $i 值为 0,因为具有别名 "polarized" 的对象是数组中的第一项。您可以在 jq play 上尝试一下:
https://jqplay.org/s/DsHYi7ixyn
现在我想在不同的过滤器中使用那个 $i 值,所以不是输出 0,而是输出类似这样的结果:
.edgeGroups.hasAttributeValue[] | select(.[0] == 0)
我试过像这样使用管道运算符,但它只是给我一个错误:
.vertices | range(0;length) as $i | select(.[$i].alias=="polarized" and .[$i].ns=="ca") | .edgeGroups.hasAttributeValue[] | select(.[0] == $i)
如果我能理解如何在链接过滤器中使用 $i,我想我可以解决我的主要目标,即将几个过滤器链接在一起,以便我可以获得与 71597 对象关联的所有项目 -即
{
"id": 129748,
"ns": "av",
"name": "Polarized"
},
{
"id": 129898,
"ns": "av",
"name": "False"
}
提前感谢您的帮助!
您的 jq 过滤器可以用几个括号修复:
(.vertices
| range(0;length) as $i
| select(.[$i].alias=="polarized" and .[$i].ns=="ca")
| $i) as $i
| .edgeGroups.hasAttributeValue[]
| select(.[0] == $i)
我有一些 JSON 看起来像这样:
{
"vertices": [
{
"id": 71597,
"ns": "ca",
"alias": "polarized"
},
{
"id": 129748,
"ns": "av",
"name": "Polarized"
},
{
"id": 129898,
"ns": "av",
"name": "False"
}
],
"edgeGroups": {
"hasAttributeValue": [
[
0,
1
],
[
0,
2
]
]
}
}
.vertices
中的各个条目通过它们的数组索引相关联。因此,在这种情况下,第一个顶点(id:71597 - 数组索引为 0)的属性值为 129748 和 129898(数组索引分别为 1 和 2)。
我可以使用以下 jq 过滤器获取正在搜索的属性的数组索引:
.vertices | range(0;length) as $i | select(.[$i].alias=="polarized" and .[$i].ns=="ca") | $i
returns $i 值为 0,因为具有别名 "polarized" 的对象是数组中的第一项。您可以在 jq play 上尝试一下:
https://jqplay.org/s/DsHYi7ixyn
现在我想在不同的过滤器中使用那个 $i 值,所以不是输出 0,而是输出类似这样的结果:
.edgeGroups.hasAttributeValue[] | select(.[0] == 0)
我试过像这样使用管道运算符,但它只是给我一个错误:
.vertices | range(0;length) as $i | select(.[$i].alias=="polarized" and .[$i].ns=="ca") | .edgeGroups.hasAttributeValue[] | select(.[0] == $i)
如果我能理解如何在链接过滤器中使用 $i,我想我可以解决我的主要目标,即将几个过滤器链接在一起,以便我可以获得与 71597 对象关联的所有项目 -即
{
"id": 129748,
"ns": "av",
"name": "Polarized"
},
{
"id": 129898,
"ns": "av",
"name": "False"
}
提前感谢您的帮助!
您的 jq 过滤器可以用几个括号修复:
(.vertices
| range(0;length) as $i
| select(.[$i].alias=="polarized" and .[$i].ns=="ca")
| $i) as $i
| .edgeGroups.hasAttributeValue[]
| select(.[0] == $i)