Je souhaite convertir une chaîne JSON en tableau dans bash . La chaîne JSON est transmise au script bash en tant qu'argument (elle n'existe pas dans un fichier).
Existe-t-il un moyen d'y parvenir sans utiliser certains fichiers temporaires?
De même à ceci:
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
Je suggère d'utiliser une bash ici une chaîne . par exemple.
jq '.key' <<< "$json_data"
La valeur de la variable "json_data" donnée dans la question initiale n'était pas un JSON valide. Cette réponse couvre donc toujours les deux cas (JSON presque valide et valide).
Si "$ json_data" contient une valeur JSON valide, voici deux alternatives non mentionnées ailleurs sur cette page.
--argjson
Par exemple:
jq -n --argjson data "$json_data" '$data.key'
env
Si la variable Shell n'est pas déjà une variable d'environnement:
json_data=“$json_data” jq -n 'env.json_data | fromjson.key'
Si effectivement $ json_data est invalid comme JSON mais valide en tant qu’expression jq, vous pouvez adopter la tactique illustrée par la transcription suivante:
$ json_data='{key:"value"}'
$ jq -n "$json_data" | jq .key
"value"
Utilisez le bash: echo "$json_data" | jq '.key'
Absolument. Il suffit de dire à bash de lui donner un fichier .
jq '.key' <(echo "$json_data")
Et assurez-vous de le lancer en bash, pas sh.
#! /bin/bash
json_data='{"key":"value"}'
echo $json_data | jq --raw-output '.key'
Si vous essayez de faire cela dans un fichier .sh
, voici ce qui a fonctionné pour moi:
local json_data $(getJiraIssue "$1") # store JSON in var
echo `jq -n "$json_data" | jq '.fields.summary'` # pass that JSON var to jq