J'ai besoin d'obtenir quelques valeurs d'un fichier json. J'ai besoin d'un tableau (dimmer1, dimmer2)
Quelqu'un a une idée?
{
"devices": {
"dimmer1": {
"protocol": ["kaku_dimmer"],
"state": "off",
"dimlevel": 1
},
"dimmer2": {
"protocol": ["kaku_dimmer"],
"state": "off",
"dimlevel": 1
}
}
EDIT: Après clarification dans les commentaires, pour récupérer les états des appareils dont la clé commence par "dimmer", utilisez
jq '[ .devices | to_entries[] | select(.key | startswith("dimmer")) | .value = .value.state ] | from_entries' filename.json
Production:
{
"dimmer1": "off",
"dimmer2": "off"
}
Cela fonctionne comme suit:
.devices
Sélectionne l'attribut .devices
De l'objet JSONto_entries
Fait exploser l'objet en un tableau de paires clé-valeur décrivant ses attributs (les périphériques), c'est-à-dire qu'un attribut "foo": "bar"
Devient un objet { "key": "foo", "value": "bar" }
, Et le l'objet éclaté est développé en un tableau de ces objets (un pour chaque attribut)to_entries[]
Décompresse ce tableau, afin de le diriger à traversselect(.key | startswith("dimmer"))
, qui sélectionne les périphériques dont la clé commence par dimmer
.value = .value.state
Restructure la paire clé-valeur qui décrit le périphérique afin que la valeur soit remplacée par son attribut state
[ all that ]
Crée un tableau JSON de tout cela, et[ all that ] | from_entries
Reconvertit le tableau de paires clé-valeur en objets JSON.Pour récupérer les clés des attributs de devices
dans un tableau:
jq '.devices | keys' filename.json
Pour récupérer les valeurs (également dans un tableau),
jq '[ .devices[] ]' filename.json
Je ne savais pas exactement lequel de ces deux vous vouliez dire.