2017-07-29 3 views
1

Hier ist ein Beispiel für eine cURL Anfrage an die GitHub api v4, die Rückkehr einen Fehler hält:gültig GitHub api v4 Abfrage hält Fehler „JSON Probleme Parsen“ Rückkehr

curl -H "Authorization: bearer token" -X POST -d " \ 
{ \ 
    \"query\": \"query { repositoryOwner(login: \"brianzelip\") { id } }\" \ 
} \ 
" https:\/\/api.github.com\/graphql 

Der Fehler, der zurückgegeben wird:

{ 
    "message": "Problems parsing JSON", 
    "documentation_url": "https://developer.github.com/v3" 
} 

Warum bekomme ich diesen Fehler?


Gemäß der GH api v4 docs about forming query calls die oben cURL Befehl gültig ist. Hier ist, was die docs sagen, dass mein Anspruch sichert, dass die oben cURL Befehl gültig ist:

curl -H "Authorization: bearer token" -X POST -d " \ 
{ \ 
    \"query\": \"query { viewer { login }}\" \ 
} \ 
" https://api.github.com/graphql 

Note: The string value of "query" must escape newline characters or the schema will not parse it correctly. For the POST body, use outer double quotes and escaped inner double quotes.

Wenn ich geben Sie die obige Abfrage in die GitHub GraphQL API Explorer, bekomme ich das erwartete Ergebnis. Das Format des oben cURL Befehls sieht wie folgt für die GH GraphQL Explorer:

{ 
    repositoryOwner(login: "brianzelip") { 
    id 
    } 
} 
+0

Ist es nicht genial, wie die JSON GraphQL Entdecken richtig analysiert, aber wenn die API mit den exakt gleichen Kriterien es ist problematisch. – bart

Antwort

1

Sie haben verschachtelte doppelte Anführungszeichen in query JSON Feld zu entkommen, bei dem Körper wäre:

{ 
"query": "query { repositoryOwner(login: \"brianzelip\") { id } }" 
} 

So ersetzen \"brianzelip\" mit \\\"brianzelip\\\":

curl -H "Authorization: bearer token" -d " \ 
{ \ 
    \"query\": \"query { repositoryOwner(login: \\\"brianzelip\\\") { id } }\" \ 
} \ 
" https://api.github.com/graphql 

Sie können auch einfache Anführungszeichen anstelle von doppelten Anführungszeichen verwenden, den Körper zu wickeln:

curl -H "Authorization: bearer token" -d ' 
{ 
    "query": "query { repositoryOwner(login: \"brianzelip\") { id } }" 
} 
' https://api.github.com/graphql 

Sie könnten auch heredoc verwenden:

curl -H "Authorization: bearer token" -d @- https://api.github.com/graphql <<EOF 
{ 
    "query": "query { repositoryOwner(login: \"brianzelip\") { id } }" 
} 
EOF