如何根据条件 jq 查询获得平面输出?
How to get a flat output based on conditional jq query?
我有以下 JSON:
[
{
"name": "InstanceA",
"tags": [
{
"key": "environment",
"value": "production"
},
{
"key": "group",
"value": "group1"
}
]
},
{
"name": "InstanceB",
"tags": [
{
"key": "group",
"value": "group2"
},
{
"key": "environment",
"value": "staging"
}
]
}
]
我正在尝试根据条件 key == 'environment'
获得 value
的平坦输出。我已经尝试了 select(boolean_expression)
,但我无法获得所需的输出,例如:
"InstanceA, production"
"InstanceB, staging"
jq
支持这种输出吗?如果可以,怎么做?
jq '.[] | .name + ", " + (.tags[] | select(.key == "environment").value)' f.json
是的。
例如:
$ jq '.[] | "\(.name), \(.tags | from_entries | .environment)"' input.json
输出:
"InstanceA, production"
"InstanceB, staging"
这是一个使用 join
的解决方案
.[]
| [.name, (.tags[] | if .key == "environment" then .value else empty end)]
| join(", ")
我有以下 JSON:
[
{
"name": "InstanceA",
"tags": [
{
"key": "environment",
"value": "production"
},
{
"key": "group",
"value": "group1"
}
]
},
{
"name": "InstanceB",
"tags": [
{
"key": "group",
"value": "group2"
},
{
"key": "environment",
"value": "staging"
}
]
}
]
我正在尝试根据条件 key == 'environment'
获得 value
的平坦输出。我已经尝试了 select(boolean_expression)
,但我无法获得所需的输出,例如:
"InstanceA, production" "InstanceB, staging"
jq
支持这种输出吗?如果可以,怎么做?
jq '.[] | .name + ", " + (.tags[] | select(.key == "environment").value)' f.json
是的。
例如:
$ jq '.[] | "\(.name), \(.tags | from_entries | .environment)"' input.json
输出:
"InstanceA, production"
"InstanceB, staging"
这是一个使用 join
的解决方案 .[]
| [.name, (.tags[] | if .key == "environment" then .value else empty end)]
| join(", ")