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
Bash here string を使用することをお勧めします。例えば.
jq '.key' <<< "$json_data"
元の質問で指定された変数「json_data」の値は有効なJSONではなかったため、この応答は両方のケース(ほぼ有効で有効なJSON)をカバーしています。
「$ json_data」が有効なJSON値を保持している場合、このページの他の場所で言及されていない2つの選択肢があります。
--argjson
例えば:
jq -n --argjson data "$json_data" '$data.key'
env
シェル変数が環境変数でない場合:
json_data="$json_data" jq -n 'env.json_data | fromjson.key'
確かに$ json_dataがJSONとしてinvalidであるが、jq式として有効な場合、次のトランスクリプトで示される戦術を採用できます。
$ json_data='{key:"value"}'
$ jq -n "$json_data" | jq .key
"value"
Bashを使用します:echo "$json_data" | jq '.key'
#! /bin/bash
json_data='{"key":"value"}'
echo $json_data | jq --raw-output '.key'
.sh
ファイルでこれを実行しようとしている場合、これが私にとってうまくいったことです:
local json_data $(getJiraIssue "$1") # store JSON in var
echo `jq -n "$json_data" | jq '.fields.summary'` # pass that JSON var to jq