【发布时间】:2018-07-31 22:38:20
【问题描述】:
我把这个 JSON 数据弄乱了,我需要提取类型列表:
{
"token/": {
"accessor": "auth_token_909d6a81",
"config": {
"default_lease_ttl": 0,
"max_lease_ttl": 0
},
"description": "token based credentials",
"local": false,
"seal_wrap": false,
"type": "token" <-- I need to extract this value ...
},
"userpass/": {
"similar_to": {
"above": null
},
"description": "",
"local": false,
"seal_wrap": false,
"type": "userpass" <-- ... and this one
},
"request_id": "f2a4c135-f699-f29d-ca7c-3320dce0a550",
"more_keys": "more_values",
"data": {
"more_data": {
"even_more_data": "snipped"
}
},
"you_get_the": "idea"
}
抱歉,内联 cmets 在复制和粘贴时弄乱了数据,但这似乎是阐明我的目标的最佳方式:
对于所有以/ 结尾的根键,我需要.type 的值,这样上例的最终结果就是token userpass。
我设法为根键创建了一个有效的过滤器:
host:~ user$ jq -r '. | keys[] | endswith("/")' <<< "${json_data}"
false
false
false
true
true
false
我可以使用该过滤器来仅获取所需的键,但这只是键本身,而不是它们下面的整个数据结构:
host:~ user$ jq -r '. | keys[] | select(. | endswith("/"))' <<< "${json_data}"
token/
userpass/
我似乎无法将所有这些放在一起......
谁能帮帮我?
【问题讨论】: