2017-07-20 3 views
0

Ich habe die folgende JSON als Eingabe (die von https://openlibrary.org/api/books?bibkeys=ISBN:039397281X&format=json abgerufen werden kann):jq Syntaxfehler Extrahieren Schlüssel mit Doppelpunkt in seinem Namen

{ 
    "ISBN:039397281X": { 
    "bib_key": "ISBN:039397281X", 
    "preview": "borrow", 
    "thumbnail_url": "https://covers.openlibrary.org/b/id/7890978-S.jpg", 
    "preview_url": "https://archive.org/details/isbn_9780393972818", 
    "info_url": "https://openlibrary.org/books/OL348852M/Don_Quijote" 
    } 
} 

Mein Ziel die preview_url zu extrahieren ist - also für die Eingabe oben, um die Ausgabe https://archive.org/details/isbn_9780393972818 zu erhalten.

ich zur Zeit mit dem folgenden:

curl 'https://openlibrary.org/api/books?bibkeys=ISBN:039397281X&format=json' \ 
    | jq -r '.ISBN:039397281X' | jq -r '.preview_url' 

Dies ist jedoch sendet einen Fehler:

jq: error: syntax error, unexpected ':', expecting $end (Unix shell quoting issues?) at <top-level>, line 1: 
.ISBN:039397281X  
jq: 1 compile error 

Wie kann es gelöst werden?

+0

Die Änderungen, die ich an der Frage vorgenommen habe, sollen ein Beispiel dafür sein, wie ähnliche Fragen in Zukunft gestellt werden sollten: Es gibt eine englischsprachige Beschreibung dessen, was Sie tun möchten; Code, der kopiert und eingefügt werden kann, um das Problem zu reproduzieren; die Eingabedaten (oder eine Teilmenge, die ausreicht, um das Problem zu testen) sind in der Frage selbst vorhanden (so dass die Frage und ihre Antworten auch dann Sinn ergeben, wenn die Verbindung unterbrochen wird oder sich der Inhalt dahinter ändert) –

+0

Related: [jq - Syntax, wenn im Schlüssel Platz ist] (https://stackoverflow.com/questions/33700103/syntax-when-there-is-a-space-in-the-key); oder [JQ Parsing Strings mit '-'] (https://stackoverflow.com/questions/34880288/jq-parsing-strings-with) –

Antwort

1

Was Sie wollen, ist:

jq -r '.["ISBN:039397281X"].preview_url' 

oder einfacher:

jq -r '.[].preview_url' 

Die Syntax .foo kann nur den Wert mit der Taste foo assoziiert zu extrahieren verwendet werden, wenn foo ein gültiger Bezeichner ist. Doppelpunkte sind in Bezeichnernamen nicht gültig, daher muss eine andere Syntax() verwendet werden.

Verwandte Themen