Как найти значение пары "ключ-значение" в json в скрипте bash

Для CentOS пакет rdesktop находится в репозитории nux -dextop. Вам нужно установить репозиторий, а затем rdesktop:

sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro 
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm    
sudo yum install rdesktop
0
08.11.2019, 22:02
2 ответа

Краткий ответ :Установитьjq

Вы не должны анализировать json без парсера json.

Чтобы сделать это с помощьюjq:

echo "$json" | jq -r '.access_token'

Я предпочитаю парсер json json ,используя его, вы могли бы сделать:

echo "$json" | json access_token

Примечание:оба этих решения предполагают, что ваш json-объект точно (или, по крайней мере, почти точно ), как вы показали в своем примере, и я знаю, что это не так.

9
28.01.2020, 03:08

Если вы не можете установить синтаксический анализатор json, то, предполагая, что ваши строки не могут содержать двойные кавычки или символы новой строки, каждая запись находится в одной строке, а каждый тег и значение являются строками, заключенными в двойные -кавычки -, как в вашем разместил образец ввода, это будет работать с использованием любого awk в любой оболочке на каждом компьютере UNIX:

$ cat tst.awk
{
    while ( match($0,/"[^"]*"/) ) {
        hit = substr($0,RSTART+1,RLENGTH-2)
        if ( ++cnt % 2 ) {
            tag = hit
        }
        else {
            val = hit
            f[tag] = val
        }
        $0 = substr($0,RSTART+RLENGTH)
    }
    print f[tgt]
}

$ echo "$json" | awk -v tgt='access_token' -f tst.awk
kjdshfsd

$ echo "$json" | awk -v tgt='key2' -f tst.awk
value
2
28.01.2020, 03:08

Теги

Похожие вопросы