【发布时间】:2019-04-26 05:44:41
【问题描述】:
我有一些如下所示的 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
返回 $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"
}
提前感谢您的帮助!
【问题讨论】:
-
对不起,这个问题很不清楚。您展示了结果应该是什么,但 .edgeGroups 方面的解释似乎完全不相关。请说清楚。顺便说一句,如果您专注于数据在您创建的管道中流动的方式,您或许能够解决您的问题。
-
对不起,我不清楚,但 edgeGroups 中项目的相关方式是相关的。基本上,我想在下一个 jq 过滤器中提供来自第一个过滤器(这是 edgeGroups.hasAttributeValue 中的数组索引)的值 $i:.edgeGroups.hasAttributeValue[] | select(.[0] == i)
-
这就是我的猜测,正如您将在发布的答案中看到的那样。