Ich möchte den JSON-String in ein Array in bash ..__ konvertieren. Der JSON-String wird als Argument an das Bash-Skript übergeben (es existiert nicht in einer Datei).
Gibt es eine Möglichkeit, dies zu erreichen, ohne einige temporäre Dateien zu verwenden?
Ähnlich dazu:
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
Ich würde vorschlagen, eine bash hier string zu verwenden. z.B.
jq '.key' <<< "$json_data"
Der Wert der Variablen "json_data", die in der ursprünglichen Frage angegeben wurde, war kein gültiger JSON-Wert, daher deckt diese Antwort immer noch beide Fälle ab (nahezu gültiger und gültiger JSON-Code).
Wenn "$ json_data" einen gültigen JSON-Wert enthält, sind hier zwei Alternativen, die an anderer Stelle auf dieser Seite nicht aufgeführt sind.
--argjson
Zum Beispiel:
jq -n --argjson data "$json_data" '$data.key'
env
Wenn die Shell-Variable nicht bereits eine Umgebungsvariable ist:
json_data=“$json_data” jq -n 'env.json_data | fromjson.key'
Wenn $ json_data tatsächlich als JSON invalid aber als jq-Ausdruck gültig ist, können Sie die Taktik anwenden, die durch das folgende Transkript veranschaulicht wird:
$ json_data='{key:"value"}'
$ jq -n "$json_data" | jq .key
"value"
Verwenden Sie die Bash: echo "$json_data" | jq '.key'
Absolut. Einfach bash anweisen, stattdessen eine Datei zu geben.
jq '.key' <(echo "$json_data")
Und stellen Sie sicher, dass Sie es in Bash ausführen, nicht in sh.
#! /bin/bash
json_data='{"key":"value"}'
echo $json_data | jq --raw-output '.key'
Wenn Sie versuchen, dies in einer .sh
-Datei durchzuführen, funktionierte dies für mich:
local json_data $(getJiraIssue "$1") # store JSON in var
echo `jq -n "$json_data" | jq '.fields.summary'` # pass that JSON var to jq