json 当我只知道前一个值时,如何用jq检索下一个键值对[重复]

iq3niunx  于 2023-11-20  发布在  其他
关注(0)|答案(1)|浏览(110)

此问题在此处已有答案

How to retrieve the next key value pair in a json file with jq when I know the previous one(2个答案)
2天前关闭。
如果我知道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值和下一个值(secretName6secretValue6
我尝试了以下命令:

.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文件。

2lpgd968

2lpgd9681#

这是基于previous approach,它是关于在一个对象中查找下一个键值对。(与前一种情况相反,它具有显式的顺序),而数组项是对象,输出是找到的对象中的两个值(而不是它们的键值对)。因此,您不需要to_entries,也不需要任何对.key.value的引用。只需直接处理数组.globalSecrets及其项的字段(.secretName.secretValue):

.globalSecrets | while(. != []; .[1:])[:2]
| select(first.secretValue == "secretValue5")
| first.secretName, first.secretValue, last.secretName, last.secretValue

个字符
Demo

相关问题