Фильтрация JSON по имени объекта с использованием jq - PullRequest
1 голос
/ 09 апреля 2019

Я не могу отфильтровать по ключам, используя 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"]'

==> null

Или даже перечислить ключи:

# /home/test/show_param_db.sh -p memory -h host00* -f json | jq -r '.[]' |  jq -r 'keys'

[0]

Я надеюсь получить json по имени хоста.Спасибо за все предложения.

1 Ответ

0 голосов
/ 09 апреля 2019

Вы ищете только объект, соответствующий host001?Вы можете использовать to_entries и from_entries для сопоставления между парами ключ / значение и объектами JSON и использовать выражение select() для соответствия необходимому хосту

jq '.[][] | to_entries | map(select(.key=="host001")) | from_entries'

Чтобы сделать его динамическим, передайте имякак отдельный аргумент

jq --arg host "host001" '.[][] | to_entries | map(select(.key==$host)) | from_entries'
...