乍看之下,这听起来像是难以置信的直截了当,但我已经呆了几个小时了。
我试图提取参数对象的名称(未知),但前提是它列出了“ defaultValue”键。
输入对象(Azure ARM模板):
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"componentName": {
"defaultValue": "storage",
"type": "string"
},
"subnetId": {
"type": "string",
"metadata": {
"description": "The subnet to which this storage component belongs."
}
}
},
"variables": {}
}
所需的输出:
"componentName": {
"defaultValue": "storage",
"type": "string"
}
我尝试了以下多次迭代,但均未成功:
.parameters[] | select( has( "defaultValue"))
(将对象扩展到其“ componentName”的名称之外,尽管可以正确找到两者的匹配对象)
.parameters | map(select(has("defaultValue")))
(与上述相同)
.parameters | select( any (has( "defaultValue")))
(这也会错误地返回SubnetId对象,该对象没有“ defaultValue”属性)
很明显,我误解了一些基本知识。我将不胜感激,可以提供任何建议或指示。
答案 0 :(得分:2)
您所需的输出不是有效的JSON。我知道要获得的最接近的信息(无自定义字符串格式)是:
jq '.parameters | map_values(select(has("defaultValue")))'
# => {
# "componentName": {
# "defaultValue": "storage",
# "type": "string"
# }
# }