Conversion d'un objet JSON en un tableau associatif Bash
J'ai un script Bash. Il récupère les données en JSON.
J'ai besoin de convertir le tableau JSON d'un tableau Bash.
Exemple
{
"SALUTATION": "Hello world",
"SOMETHING": "bla bla bla Mr. Freeman"
}
En Bash je veux obtenir une valeur comme cela echo ${arr[SOMETHING]}
.
source d'informationauteur Evgenii
Vous devez vous connecter pour publier un commentaire.
Si vous voulez une clé et une valeur, et sur la base Comment faire pour convertir un objet json à la clé=valeur de format dans JQvous pouvez le faire:
D'une manière plus générale, vous pouvez stocker les valeurs dans un tableau
myarray[key] = value
comme ça, juste en fournissantjq
à lawhile
avec lewhile ... do; ... done < <(command)
syntaxe:Et puis vous pouvez faire une boucle à travers les valeurs comme ceci:
Pour cette entrée donnée, il retourne:
Contexte: Cette réponse a été rédigée de manière à être sensible à une question de titre qui n'existe plus..
L'OP question en fait décrit des objets, vs tableaux.
Pour être sûr que nous aider d'autres personnes à venir qui sont fait à la recherche pour obtenir de l'aide avec JSON tableaux, cependant, il vaut la peine de les couvrir explicitement.
Pour le coffre-ish cas où les chaînes ne peuvent pas contenir des retours à la ligne (et quand bash 4.0 ou plus récent), cela fonctionne:
À prendre en charge les anciennes versions de bash, et les chaînes de caractères avec des sauts de ligne, nous obtenons un peu plus évolué, à l'aide d'un NUL délimité par des flux de lire à partir de
jq
:C'est comment peut-il être fait de manière récursive:
L'appeler:
Le tableau sera accessible comme suit:
Pour charger objet JSON dans un bash tableau associatif efficacement (sans l'aide de boucles en bash), on peut utiliser l'outil "jq", comme suit.
Avertissement: il utilise eval, ce qui est dangereux si le json entrée est de source inconnue (peut contenir des commandes shell qui eval peut exécuter).