给定以下JSON包含3个变量:
{
"variables": {
"AWS_ROLE": "DevOpsAccessRole",
"AWS_REGION": {
"description": "AWS region",
"value": "us-west-2",
"options": [
"us-west-2",
"us-east-1"
]
},
"ENVIRONMENT": {
"description": "Environment to deploy to",
"value": "dev",
"options": [
"dev",
"qa",
"prod"
]
}
}
}
我的目标是只选择包含description
字段的变量名。
所以期望的输出是(不关心顺序):
AWS_REGION
ENVIRONMENT
AWS_ROLE
应该被省略,因为它不包含description
密钥。
我最初尝试过:jq -r '.variables | keys []'
它返回:
AWS_ROLE
AWS_REGION
ENVIRONMENT
但是我被卡住了删除没有description
的那些。
还尝试:jq -r '.variables |..| select(.description?)'
但这里的问题是我无法访问变量名。
如何在jq
中做到这一点?
1条答案
按热度按时间v8wbuo2f1#
使用
to_entries
可以同时访问.key
和.value
,使用has
测试是否存在(子)键,如果它不是对象(因此没有键,会出错),则使用?
抑制错误。使用-r
标志可以得到原始文本输出。Demo
同样的技术使用
keys
,迭代并存储在变量中:Demo