bash: Itération sur les membres d'un tableau JSON sélectionné par index

Je suis en utilisant jq pour analyser un fichier JSON, l'extraction de chaque tableau JSON dans une série dans une coquille de tableau.

Mon code actuel se présente comme suit:

for ((i = 0; i < ${#nvars[@]}; i++)); do
    v1=($(cat $INPUT | jq '."config"[i]."var1"[]'))
    echo $v1
done

message d'erreur:

error: i is not defined

J'ai aussi remplacé

v1=($(cat $INPUT | jq '."config"[i]."var1"[]'))

avec

v1=($(cat $INPUT | jq '."config"[$i]."var1"[]'))

ne fonctionne toujours pas. Une idée? Toute aide est appréciée!


Edit: Exemple De Données D'Entrée

{
    "config-vars":[
        {
            "var1":["v1","v2"],
            "var2":""
        },
        {
            "var1":["v3",""],
            "var2":"v4"
        }
    ]
}
  • Il y a quelques très détaillée des réponses ici. Ma solution préférée, bien que sa pertinence repose sur le contrôle des flux de votre script: each_obj() { local cmd="$1" json_arr="$2" len i; len=$(jq 'length' <(echo "$json_arr")); for (( i=0; i<len; i+=1 )); do $cmd "$(jq ".[$i]" <(echo "$json_arr"))"; done; }
  • Je suggère d'inverser un peu: json_arr="$1"; shift, et puis vous pouvez utiliser "$@" pour exécuter une commande composée de tous les autres arguments sans risquer les enjeux de la mywiki.wooledge.org/BashFAQ/050 grâce à l'utilisation de $cmd.
InformationsquelleAutor odieatla | 2015-01-16