繁体   English   中英

如何根据jq中上述数组中对象中元素的值选择/获取对象元素的(对象数组)键?

[英]How to select/get object elements' (array of objects) keys based on value of an element in an object in the aforementioned array in jq?

我有以下输入:

{
  "key1": {
    "subkey1": [
      {
        "filterkey1": "value1",
        "filterkey2": "value2"
      },
      {
        "filterkey1": "value3",
        "filterkey2": "value4"
      }
    ],
    "subkey2": [
      {
        "filterkey1": "value5",
        "filterkey2": "value6"
      },
      {
        "filterkey1": "value7",
        "filterkey2": "value8"
      }
    ],
    "subkey3": [
      {
        "filterkey1": "value1",
        "filterkey2": "value6"
      },
      {
        "filterkey1": "value9",
        "filterkey2": "value4"
      }
    ]
  },
  "key2": {
  }
}

我想获取具有对象的数组的键,该对象的键为"value1""filterkey1" 所以在这种情况下,输出必须是:

["subkey1", "subkey3"]

我关心的所有元素都在“key1”对象中。

使用Get 子项小号keys_unsorted ,并检查它们的值有filterkey1: "value1"使用对any

.key1 | [
    keys_unsorted[] as $k
    | if any(.[$k][]; .filterkey1=="value1")
    then $k 
    else empty end
]

如果您也想考虑替代方案,这里有一个基于unix walk-path的实用程序jtc允许类似地操作JSON:

bash $ <file.json jtc -jw'[key1][filterkey1]:<value1>:[-2]<>k'
[
   "subkey1",
   "subkey3"
]
bash $ 

PS> Disclosure:我是用于JSON操作的jtc -shell cli工具的创建者

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM