Json jq-基于属性的存在选择对象

Json jq-基于属性的存在选择对象,json,jq,Json,Jq,乍一看,这听起来很直截了当,但我已经研究了几个小时了 我试图提取parameter对象的名称(无法知道),但前提是它列出了一个“defaultValue”键 输入对象(Azure ARM模板): 期望输出: "componentName": { "defaultValue": "storage", "type": "string" } 我尝试了以下多次迭代,但都没有成功: .parameters[] | select( has( "defaul

乍一看,这听起来很直截了当,但我已经研究了几个小时了

我试图提取parameter对象的名称(无法知道),但前提是它列出了一个“defaultValue”键

输入对象(Azure ARM模板):

期望输出:

    "componentName": {
        "defaultValue": "storage",
        "type": "string"
    }
我尝试了以下多次迭代,但都没有成功:

.parameters[] | select(  has( "defaultValue")) 
(将对象扩展到其名称“componentName”之外-尽管这样可以正确找到两者的匹配对象)

(同上)

(这也会错误地返回SubnetId对象,该对象没有“defaultValue”属性)


很明显,我误解了一些基本的东西。如果您能提供任何建议或指导,我将不胜感激。

您想要的输出不是有效的JSON。我所知道的最接近的(无自定义字符串格式)是:

.parameters[] | select(  has( "defaultValue")) 
.parameters | map(select(has("defaultValue"))) 
.parameters | select( any (has( "defaultValue"))) 
jq '.parameters | map_values(select(has("defaultValue")))'
# => {
#      "componentName": {
#        "defaultValue": "storage",
#        "type": "string"
#      }
#    }