提问人:bessey 提问时间:11/17/2023 最后编辑:tripleeebessey 更新时间:11/17/2023 访问量:54
当我只知道上一个值时,如何使用 jq 检索下一个键值对 [duplicate]
How to retrieve the next key value pair with jq when I know the previous value only [duplicate]
问:
如果我知道 JSON 文件中的上一个值,我想检索下一个键值对,如下所示:
{
"metadata":{
"secretSchema":"3.0",
"tenant":"MyTenantName"
},
"globalSecrets":[
{
"secretName":"secretName1",
"secretValue":"secretValue1"
},
{
"secretName":"secretName2",
"secretValue":"secretValue2"
},
{
"secretName":"secretName3",
"secretValue":"secretValue3"
},
{
"secretName":"secretName4",
"secretValue":"secretValue4"
},
{
"secretName":"secretName5",
"secretValue":"secretValue5"
},
{
"secretName":"secretName6",
"secretValue":"secretValue6"
},
{
"secretName":"secretName7",
"secretValue":"secretValue7"
}
]
}
我只知道 secretValue5 的值,并想检索 secretName5 值和下一个值(secretName6 和 secretValue6 )
我尝试了以下命令:
.globalSecrets[] | to_entries | while(. != []; .[1:])[:2] | select(first.value == "secretValue5") | first.key, first.value, last.key, last.value
但结果是
secretValue
secretValue5
secretValue
secretValue5
预期的结果是
secretName5
secretValue5
secretName6
secretValue6
我在这篇文章中发布了一个类似的问题,但使用另一个带有上述命令的 JSON 文件,它工作正常,但不是来自上面的 JSON 文件。
答:
1赞
pmf
11/17/2023
#1
这是基于之前的方法,即在对象中查找下一个键值对。然而,在当前情况下,问题在于如何查找数组中的下一个项目(与前一种情况相反,它具有明确的顺序),而数组项目是对象,输出是找到的对象的两个值(而不是它们的键值对)。因此,您不需要 ,因此不需要对 或 的任何引用。只需直接处理数组及其项的字段(和):to_entries
.key
.value
.globalSecrets
.secretName
.secretValue
.globalSecrets | while(. != []; .[1:])[:2]
| select(first.secretValue == "secretValue5")
| first.secretName, first.secretValue, last.secretName, last.secretValue
secretName5
secretValue5
secretName6
secretValue6
评论
0赞
bessey
11/17/2023
非常感谢这个快速的解决方案,这正是我所需要的。
评论