Voici mon config.json:
{
"env": "dev",
"dev": {
"projects" : {
"prj1": {
"dependencies": {},
"description": ""
}
}
}
}
Voici mes commandes bash:
PRJNAME='prj1'
echo $PRJNAME
jq --arg v "$PRJNAME" '.dev.projects."$v"' config.json
jq '.dev.projects.prj1' config.json
Le résultat:
prj1
null
{
"dependencies": {},
"description": ""
}
Donc, $ PRJNAME est prj1, mais le premier appel ne génère que null
.
Est-ce que quelqu'un peut m'aider?
Le programme jq .dev.projects."$v"
de votre exemple essaiera littéralement de trouver une clé nommée "$v"
. Essayez plutôt ce qui suit:
jq --arg v "$PRJNAME" '.dev.projects[$v]' config.json
vous pouvez aussi utiliser --argjson
lorsque vous faites votre json.
--arg a v set variable $a to value <v>;
--argjson a v set variable $a to JSON value <v>;
Comme demandé dans un commentaire ci-dessus, il existe un moyen de passer de multiples argumets… .. Peut-être qu'il y a un moyen plus élégant, mais cela fonctionne.
jq --arg key1 $k1 --arg key2 $k2 --arg key3 $k3 --arg key4 $k4 '.[$key1] | .[$key2] | .[$key3] | .[$key4] '
jq --arg key $k ' if key != "" then .[$key] else . end'
jq --arg key $k ' if type == "array" then .[$key |tonumber] else .[$key] end'
bien sûr, vous pouvez les combiner!