Как сохранить все значения ключей в переменную массива - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть команда cURL, которая возвращает некоторые результаты json.

У меня есть:

{  
    "all":[  
        {
            "id":"1"
        },
        {
            "id":"2"
        },
        {
            "id":"3"
        }
    ]
} 

Моя цель - восстановить все значения идентификаторов в массив в Bash.Я знаю, как получить конкретное удостоверение личности, зная положение.Вот что я попробовал:

#!/bin/bash
CURL_COMM=$(curl https://DOMAIN/API -H "X-Auth-Token: TOKEN" | python -c "import sys, json; print json.load(sys.stdin)['all'][0]['id']")
echo "$CURL_COMM"

Это выдаст 1, как и ожидалось, но мне нужно получить другие идентификаторы, не зная номера элемента.Возможно ли это?

И возможно ли получить значения, содержащиеся в массиве, например:

{  
    "all":[  
        {
            "id":"1",
            "actions":[  
                "power",
                "reboot"
            ]
        },
        {
            "id":"2"
        },
        {
            "id":"3"
        }
    ]
} 

Можно ли получить список действий?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Как всегда, jq упрощает работу с JSON из командной строки.

Первый в виде строки, содержащей массив JSON:

$ CURL_COMM=$(curl blah | jq -c '[ .all[].id | tonumber ]')
$ echo $CURL_COMM
[1,2,3]

Первыйкак массив bash:

$ CURL_COMM=($(curl blah | jq '.all[].id | tonumber'))
$ echo ${CURL_COMM[1]}
2

Второй:

$ jq -c '.all[0].actions' example.json
["power","reboot"]
0 голосов
/ 06 февраля 2019

Вы можете использовать понимание списка:

python -c "import sys, json; print [i['id'] for i in json.load(sys.stdin)['all']]"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...