我无法使用jq按键进行过滤。
# /home/test/show_param_db.sh -p memory -h host00* -f json | jq '.[]'
> [ {
> "host001": {
> "status": "OK",
> "msg": "",
> "data": [
> {
> "hi_shared_memory_address": "0"
> },
> {
> "memory_max_target": "1G"
> },
> {
> "memory_target": "1G"
> },
> {
> "shared_memory_address": "0"
> }
> ]
> },
> "host002": {
> "status": "ERROR",
> "msg": "su: user oracle does not exist",
> "data": []
> } } ]
当我尝试按键过滤时:
# /home/test/show_param_db.sh -p memory -h host00* -f json | jq -r '.["host001"]'
==>空
甚至列出密钥:
# /home/test/show_param_db.sh -p memory -h host00* -f json | jq -r '.[]' | jq -r 'keys'
[ 0 ]
我希望通过主机名获取json。感谢所有建议。
答案 0 :(得分:0)
您是否只是在寻找与host001
相对应的对象?您可以使用to_entries
和from_entries
在键/值对和JSON对象之间进行映射,并在两者之间使用select()
表达式来匹配所需的主机
jq '.[][] | to_entries | map(select(.key=="host001")) | from_entries'
要使其具有动态性,请将名称作为单独的arg传递
jq --arg host "host001" '.[][] | to_entries | map(select(.key==$host)) | from_entries'