jq select 其中 属性 按名称包含 属性

jq select where property contains property by name

我有一个基本的JSON结构:

{
  "A": {
    "Option1": {
      "contains": {
         "inner1": { ... },
         "inner2": { ... },
         "innerN": { ... }
      }
    }

    "Option2": {
         "innerX": { ... },
         "innerY": { ... },
         "innerZ": { ... }
    }
  }
}

我需要的是 select 根据是否包含用户输入 Option1Option2

例如:

如果选项是一个数组,我已经成功了,但如果它们本身是对象,我就不能这样做了。

我试着查看 this example using descend 但没完全理解。


更新 1

我有一个草率的方法来做这个然后重用表达式:

jq -r 'paths | select(.[-1] == "inner1") | .[0:-2] | join(".")' myFile.json

我可以将它存储在一个变量中并重新使用它。但这似乎草率。不过,这是一种解决方法。

为了测试这一点,我这样做了:

jq .$(THAT_COMMAND_ABOVE) myFile.json

使用您的方法,您需要的 jq filtergetpath:

getpath(paths | select(.[-1] == "inner1") | .[0:-2])

作为替代方案,您也可以使用 ..,例如也许:

.. | objects | map_values( select(has("inner1"))) | select(length>0)