2017-05-01 2 views
1

Ich versuche, eine GET-Anfrage mit curl in einer Bash-Datei zu machen. So rufe ich curl, und bekomme eine JSON-Antwort von meinem Server, und ich versuche, das Objekt Zeile, die Teil der Antwort ist, und ich tun dies mit jq, so kann ich den Wert drucken. Aber es funktioniert nicht.'. "Zeile"' nicht als gültige Syntax von jq akzeptiert - "unerwartete INVALID_CHARACTER"

Meine Antwort ist so etwas wie dieses:

{"line":"Azul", "id":"j3453j45n35", "lat":"39.091937", "long":"-9.265441"} 

Meine Bash-Skript:

#!/bin/bash 
while : 
do 
    cmd=$(curl -i -H "Content-Type: application/json" http://localhost:8080/cards/exists/1 | jq ‘.”line”’) 
    sleep 2 
done 

Das Ergebnis:

jq: error: syntax error, unexpected INVALID_CHARACTER, expecting $end (Unix shell quoting issues?) at , line 1: ‘.”line”’ jq: 1 compile error (23) Failed writing body

Was ist falsch gehen? Ich folgte vielen Antworten, die Leute online rieten, aber ich bekomme immer die gleiche Antwort. Mein Json-Objekt scheint korrekt zu sein. Ich bin mit dieser Datei auf MacOS Sierra

Antwort

3

Es gibt zwei Probleme mit Ihrem Code:

  • Sie verwenden Nicht-ASCII zitiert (‘ ” ” ’), die jq nicht versteht:

    • Ersetzen sie sie mit ihren ASCII-Äquivalente: ' " " '
    • Auf macOS, einen Texteditor wie t vermeiden Der Standard TextEdit.app, für den die Funktion "Intelligente Anführungszeichen" aktiviert ist, oder diese Funktion über das Menüsystem ausschalten: Edit > Substitutions > Smart Quotes Diese Funktion ersetzt ASCII-Anführungszeichen. mit ihren nicht-ASCII, typographischen Entsprechungen, , wie Sie schreiben.
    • Verwenden Sie in der Regel einen speziellen Quellcode-Editor zum Bearbeiten Ihres Codes, z. B. Visual Studio Code (kostenlos) oder Atom (kostenlos) oder Sublime Text (kostenpflichtig).
  • Ihr curl Befehl Kopf Ausgang (-i) umfasst die jq auf Drosseln - einfach weglassen die -i:

#!/bin/bash 

while :; do 
    cmd=$(curl -H 'Content-Type: application/json' 'http://localhost:8080/cards/exists/1' | 
      jq '.line') 
    sleep 2 
done 

Während '."line"' auch funktioniert hätte, Es gibt keine Notwendigkeit für die zusätzliche Ebene des Zitats für einfache Eigenschaft na Das ist so.

Auch ist es besser, Strings einzuschließen, die Sie wollen buchstäblich in '...' in der Shell interpretiert werden.

Verwandte Themen