Извлечь ответ json на переменную оболочки, используя jq - PullRequest
0 голосов
/ 09 июня 2018

У меня есть пример ответа json, как показано ниже, который я пытаюсь проанализировать с помощью jq в сценарии оболочки. [{"id":1,"notes":"Demo1\nDemo2"}]

Это команда, с помощью которой я пытаюсь получить доступ к заметкам в сценарии оболочки.

value=($(curl $URL | jq -r '.[].notes')) 

Когда я отображаю "$ value", я получаю только Demo1.Как получить точное значение: Demo1 \ nDemo2?

1 Ответ

0 голосов
/ 09 июня 2018

Для пояснения, в поле примечаний нет обратной косой черты или n.\n - это способ JSON для кодирования буквального перевода строки, поэтому следует ожидать следующее значение:

Demo1
Demo2

Проблема, с которой вы столкнулись, заключается в том, что вы разбили значение на пробел и создали массив.К каждому значению можно получить доступ по индексу:

$ cat myscript
data='[{"id":1,"notes":"Demo1\nDemo2"}]'
value=($(printf '%s' "$data" | jq -r '.[].notes'))
echo "The first value was ${value[0]} and the second ${value[1]}"

$ bash myscript
The first value was Demo1 and the second Demo2

Чтобы вместо этого получить его в виде простой строки, удалите скобки из value=(..):

$ cat myscript2
data='[{"id":1,"notes":"Demo1\nDemo2"}]'
value=$(printf '%s' "$data" | jq -r '.[].notes')
echo "$value"

$ bash myscript2
Demo1
Demo2
...