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