Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 使用jq范围变量输入新的jq过滤器_Variables_Pipeline_Jq - Fatal编程技术网

Variables 使用jq范围变量输入新的jq过滤器

Variables 使用jq范围变量输入新的jq过滤器,variables,pipeline,jq,Variables,Pipeline,Jq,我有一些JSON看起来像这样: { "vertices": [ { "id": 71597, "ns": "ca", "alias": "polarized" }, { "id": 129748, "ns": "av", "name": "Polarized" }, { "

我有一些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 |范围(0;长度)为$i |选择([$i]。别名==“polarized”和。[$i]。ns==“ca”)|$i

它返回$i值0,因为别名为“polarized”的对象是数组中的第一项。您可以在jq play上尝试:

现在我想在另一个过滤器中使用$I值,因此它不输出0,而是输出如下结果:

.edgegroup.hasAttributeValue[]|选择([0]==0)

我尝试过像这样使用管道操作符,但它只会给我一个错误:

.vertexts |范围(0;长度)为$i | select([$i]。别名==“polarized”和。[$i]。ns==“ca”)|。edgegroup.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)

对不起,问题很不清楚。您展示了结果应该是什么,但是用.edgegroup来解释似乎完全不相关。请澄清。顺便说一句,如果您专注于数据在创建的管道中流动的方式,您可能能够解决您的问题。很抱歉,我不清楚,但EdgeGroup中项目的关联方式是相关的。基本上,我想在下一个jq过滤器中从第一个过滤器(edgeGroups.hasAttributeValue中的数组索引)中输入$I的值:.edgeGroups.hasAttributeValue[]| select([0]==I)这是我猜测的,正如您将在发布的答案中看到的。谢谢!成功了。我能够继续这种模式,用ns:av获得项目的详细信息,这是我的最终目标:(.vertices | range(0;length)作为$I | select([$I]。alias==“polarized”和。[$I]。ns==“ca”)|$I)作为$I |(.edgegroup.hasaAttributeValue[]| select([0]=$I)[1]),作为$j |。顶点[$j]