J'ai un tableau JSON comme ceci:
{
"SITE_DATA": {
"URL": "example.com",
"AUTHOR": "John Doe",
"CREATED": "10/22/2017"
}
}
Je cherche à parcourir ce tableau en utilisant jq afin que je puisse définir la clé de chaque élément comme nom de variable et la valeur comme sa valeur.
Exemple:
- URL = "example.com"
- AUTEUR = "John Doe"
- CRÉÉ = "22/10/2017"
Ce que j'ai jusqu'à présent itère sur le tableau mais crée une chaîne:
constants=$(cat ${1} | jq '.SITE_DATA' | jq -r "to_entries|map(\"\(.key)=\(.value|tostring)\")|.[]")
Quelles sorties:
URL=example.com
AUTHOR=John Doe
CREATED=10/22/2017
Je cherche à utiliser ces variables plus bas dans le script:
echo ${URL}
Mais cela fait écho à une sortie vide pour le moment. Je suppose que j'ai besoin d'un eval
ou de quelque chose là-dedans, mais je n'arrive pas à mettre le doigt dessus.
declare -- “$key=$value”
et faire$AUTHOR
fonctionner etc. comme dans l'original, sans tableau. C'est toujours plus sûr qu'eval, bien que changerPATH
ou quelque chose soit encore possible donc moins que cette version.declare --
version en comparant $ key à une liste de noms de variables autorisés.Je viens de réaliser que je peux parcourir les résultats et évaluer chaque itération:
Me permet de faire:
la source
J'aime vraiment la suggestion @Michel. Parfois, vous pouvez vraiment extraire des valeurs de variables pour exécuter une tâche sur ce serveur spécifique à l'aide de BASH. Ainsi, les variables souhaitées sont connues. Cette utilisation de cette approche est le moyen d'éviter ou de multiples appels à jq pour définir une valeur par variable ou même d'utiliser l'instruction de lecture avec plusieurs variables dans lesquelles certaines peuvent être valides et vides, conduisant à un changement de valeur (c'était mon problème)
mon approche précédente qui conduit à une erreur de décalage de valeur si .svID [] .ID = "" ( sv obtiendra la valeur slotID
Si vous avez téléchargé l'objet à l'aide de curl, voici mon approche pour renommer certaines variables en un nom convivial comme extraire des données à partir de tableaux de données
utiliser eval et des filtres résoudra le problème avec une seule ligne et produira des variables avec le nom souhaité
L'avantage dans ce cas, c'est le fait qu'il va filtrer, renommer, formater toutes les variables souhaitées dans la première étape. Observez cela dedans. [0] | il est très courant d'avoir si la source provient d'un serveur API RESTFULL utilisant GET, les données de réponse comme:
Si vos données ne proviennent pas d'un tableau, par exemple. est un objet comme:
il suffit de supprimer l'index initial:
C'est une vieille question, mais je me sentais partager, car il était difficile de trouver
la source