jq: objet imbriqué, extrait de haut niveau de l'id et le levage d'une valeur à partir de l'intérieur de l'objet
Le suivant xample.json
;
[
{
"id": 12345678,
"stuff": { "book": "shelf", "hook": "line", "took": "off", "info-spec": 12 },
"votes": 23
},
{
"id": 12345679,
"stuff": { "book": "maker", "hook": "sinker", "took": "pisin", "info-spec": 23 },
"votes": 1
}
]
Je peux extraire le id
et votes
facilement:
$ jq '.[] | { id, votes }' xample.json
{
"votes": 23,
"id": 12345678
}
{
"votes": 1,
"id": 12345679
}
Mais quelle serait la requête ressemble à l'extrait de id
et stuff.info-spec
? L'évident (pour moi) de la syntaxe ne fonctionne pas du tout:
$ jq '.[] | { id, stuff.info-spec }' xample.json
error: syntax error, unexpected '.', expecting '}'
.[] | { id, stuff.info-spec }
^
1 compile error
J'ai essayé stuff[info-spec]
et stuff["info-spec"]
mais, eh bien, j'ai juste ne semblent pas avoir une idée de comment cela doit être fait.
Le tiret dans le nom de la clé semble compliquer les choses encore davantage, mais ma compréhension limitée est que je peux travailler autour de cela avec des guillemets doubles.
$ sed 's/votes/vo-tes/g' xample.json | jq '.[] | { id, "vo-tes" }'
donne le résultat attendu (c'est à dire similaire à ci-dessus sans le tableau de bord en "voix").
Je peux extraire des book
:
$ jq '.[] | .stuff.book' xample.json
mais encore une fois n'arrivent pas à trouver la syntaxe pour id
et book
; mais aussi, je ne peut pas extraire de info-spec
avec la même syntaxe:
$ jq '.[] | .stuff."info-spec"' xample.json
error: syntax error, unexpected QQSTRING_START, expecting IDENT
.[] | .stuff."info-spec"
^
1 compile error
Si je le cite, le message d'erreur est (prévisible) différents:
$ jq '.[] | .stuff.info-spec' xample.json
error: spec is not defined
.[] | .stuff.info-spec
^^^^
1 compile error
Mais bon, cela fonctionne:
$ jq '.[] | .stuff["info-spec"] ' xample.json
12
23
Ma sortie souhaité pour cet exemple, alors, est
{
"info-spec": 12,
"id": 12345678
}
{
"info-spec": 23,
"id": 12345679
}
J'ai regardé le FAQ et la jq
livre de recettes mais je n'arrive pas à trouver quelque chose à propos d'une syntaxe pour "lever" un élément à partir de l'intérieur d'un objet dans un autre objet.
OriginalL'auteur tripleee | 2014-12-19
Vous devez vous connecter pour publier un commentaire.
intéressant, la question est en effet le caractère "-" et cela fonctionne pour moi:
encore votre
jq
n'a pas l'air d'aimer que de la syntaxe comme il se brisa sur le suivant et le mien ne le fait pas:J'utilise:
edit: ressemble à une version d'un problème avec <1.4 en effet:
https://github.com/stedolan/jq/issues/38
yup, éditée avec ceci: github.com/stedolan/jq/issues/38
OriginalL'auteur Hans Z.
J'ai réussi à le comprendre.
La clé semble être ici l'utilisation de la
newkey: .complex["key"]
notation pour le levage.OriginalL'auteur tripleee