jq Bedingte Ausgabe

80

Ich benutze jq , um mit json zu spielen. Ich habe mich gefragt, wie ich etwas bedingt darin drucken soll.

Angenommen, ich interessiere mich für einen Feldanruf geo. Ich habe den folgenden Befehl verwendet und festgestellt, dass es nur einen Eintrag gibt, der geolautet null:

% cat all.json | jq '.geo != null' | sort | uniq -c              
   1 false
6891 true

Wie kann ich diesen Eintrag nur ausdrucken, ohne alles andere auszudrucken?

Ich habe so etwas wie einen printBefehl im Handbuch nicht gesehen. Und das funktioniert nicht : cat all.json | jq 'if .place == null then . end'. jqbeschwerte sich über Syntaxfehler.

Clwen
quelle

Antworten:

136

Mit der Auswahlfunktion können Sie nur die erforderlichen Einträge abrufen:

jq 'select(.geo != null)' all.json
max taldykin
quelle
21
Die Auswahl funktioniert, aber um die Frage vollständig zu beantworten, müssen Sie nur das Geo erneut filtern und in jq:cat all.json | jq 'select(.geo != null) | .geo' > geo-only.json
Andy Reagan