Gegeben die folgenden xample.json
;jq: verschachteltes Objekt, extrahiere ID der obersten Ebene und hebe einen Wert vom internen Objekt ab
[
{
"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
}
]
kann ich extrahieren die id
und votes
leicht:
$ jq '.[] | { id, votes }' xample.json
{
"votes": 23,
"id": 12345678
}
{
"votes": 1,
"id": 12345679
}
Aber was würde die Abfrage aussehen wie id
und stuff.info-spec
zu extrahieren? Offensichtliche (für mich) Syntax funktioniert nicht überhaupt:
$ jq '.[] | { id, stuff.info-spec }' xample.json
error: syntax error, unexpected '.', expecting '}'
.[] | { id, stuff.info-spec }
^
1 compile error
Ich versuchte stuff[info-spec]
und stuff["info-spec"]
als gut, aber, na ja, ich habe nicht nur eine Ahnung zu haben scheinen, wie dies geschehen soll.
Der Strich im Schlüsselnamen scheint die Dinge noch komplizierter zu machen, aber mein begrenztes Verständnis ist, dass ich das mit doppelten Anführungszeichen umgehen kann.
$ sed 's/votes/vo-tes/g' xample.json | jq '.[] | { id, "vo-tes" }'
gibt die erwartete Ausgabe (d. H. Ähnlich wie oben ohne den Bindestrich in "vo-tes").
Ich kann book
extrahieren:
$ jq '.[] | .stuff.book' xample.json
aber wieder nicht die Syntax für id
und book
herauszufinden; sondern auch, kann ich nicht info-spec
mit der gleichen Syntax extrahieren:
$ jq '.[] | .stuff."info-spec"' xample.json
error: syntax error, unexpected QQSTRING_START, expecting IDENT
.[] | .stuff."info-spec"
^
1 compile error
Wenn ich die Zitate herausnehmen, ist die Fehlermeldung (vorhersagbar) anders:
$ jq '.[] | .stuff.info-spec' xample.json
error: spec is not defined
.[] | .stuff.info-spec
^^^^
1 compile error
Aber hey, das funktioniert:
$ jq '.[] | .stuff["info-spec"] ' xample.json
12
23
My gewünschte Ausgabe für dieses Beispiel, dann ist
{
"info-spec": 12,
"id": 12345678
}
{
"info-spec": 23,
"id": 12345679
}
Ich habe mir die FAQ und die jq
Cookbook angesehen, aber ich kann anscheinend nichts über eine Syntax zum "Heben" eines Gegenstandes innerhalb eines Gegenstandes in einem anderen Gegenstand finden.
Ich bin immer noch auf 1,2 scheint es. – tripleee
yup, gerade bearbeitet mit diesem: https://github.com/stedolan/jq/issues/38 –