首页 > 解决方案 > 如何根据上述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"for key:的对象的数组的键"filterkey1"。所以在这种情况下,输出必须是:

["subkey1", "subkey3"]

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

标签: jsonjq

解决方案


获取子键s using keys_unsorted,并检查它们的值是否有filterkey1: "value1"pair using any

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

推荐阅读