it-swarm.com.ru

Могу ли я передать строковую переменную в jq, а не в файл?

Я хочу преобразовать строку JSON в массив в bash . Строка JSON передается сценарию bash в качестве аргумента (ее нет в файле).

Есть ли способ добиться этого без использования временных файлов?

Аналогично этому:

script.sh

#! /bin/bash
json_data='{"key":"value"}'
jq '.key' $json_data

jq: error: Could not open file {key:value}: No such file or directory
8
Matt R

Я бы предложил использовать строку bash здесь . например.

jq '.key' <<< "$json_data"
21
jq170727

Значение переменной "json_data", которое было дано в исходном вопросе, не было допустимым JSON, поэтому этот ответ по-прежнему охватывает оба случая (почти допустимый и действительный JSON).

Действительный JSON

Если «$ json_data» содержит действительное значение JSON, то здесь есть две альтернативы, не упомянутые где-либо еще на этой странице.

--argjson

Например:

 jq -n --argjson data "$json_data" '$data.key'

env

Если переменная Shell не является aleady переменной среды:

json_data=“$json_data” jq -n 'env.json_data | fromjson.key'

Почти действительный JSON

Если действительно $ json_data является недействительным как JSON, но допустимо как выражение jq, то вы могли бы принять тактику, проиллюстрированную следующей расшифровкой:

$ json_data='{key:"value"}'
$ jq -n "$json_data" | jq .key
"value"
7
peak

Используйте bash: echo "$json_data" | jq '.key'

4
Javier

Абсолютно. Просто скажите bash дайте ему файл .

jq '.key' <(echo "$json_data")

И убедитесь, что вы запускаете его в bash, а не в sh.

2
Ignacio Vazquez-Abrams
#! /bin/bash
json_data='{"key":"value"}'
echo $json_data | jq --raw-output '.key'
1
Supun Madushanka

Если вы пытаетесь сделать это в файле .sh, вот что сработало для меня:

local json_data $(getJiraIssue "$1")               # store JSON in var
echo `jq -n "$json_data" | jq '.fields.summary'`   # pass that JSON var to jq
0
DelightedD0D