Comment imprimer joliment un corps de sortie JSON afin de le formater dans la console bash comme
macbookproloreto:~ admin$ echo '{"foo": "lorem", "bar": "ipsum"}' | python -m json.tool
{
"bar": "ipsum",
"foo": "lorem"
}
Ma commande ressemble maintenant
http --session=cookies.txt --pretty all --json --print=b --style=xcode "https://myapi.company.com | python -m json.tool
L'option --pretty
a-t-elle pour objectif d'imprimer joliment le corps de sortie ? L'avoir semble ne pas embellir le corps de sortie, à la place, il imprime le json en texte brut
'{"foo": "lorem", "bar": "ipsum"}'
Cela fonctionne hors de la boîte:
@jkbrzt oui mais ce n'est pas la réponse body
. Il semble que ce ne soit pas joli le corps mais seulement le headers
.
@loretoparisi c'est le corps de la réponse, voir http://httpbin.org/get
Ok, j'ai trouvé le problème, c'est quelque chose qui ne va pas dans les en-têtes de réponse. En fait, si j'essaie un corps de réponse bien formaté au format json comme :
http --session=cookies.txt --pretty all --json --print=b --style=xcode "https://api.spotify.com/v1/tracks/0eGsygTp906u18L0Oimnem"
Ça marche.
Lorsque les en-têtes de réponse http sont text/plain
HTTP/1.1 200 OK
Connection: keep-alive
Content-Encoding: gzip
Content-Length: 1996
Content-Type: text/plain; charset=utf-8
la mise en forme résultante est simple.
HTTPie regarde l'en-tête de la réponse Content-Type
. Si c'est text/plain
, alors il ne fait aucun formatage spécial. L'URL que vous avez fournie renvoie Content-Type: application/json; charset=utf-8
afin qu'elle soit correctement formatée et mise en évidence en tant que JSON.
@jkbrzt exactement. En fait, le problème était que les en-têtes du serveur étaient text/plain
tandis que le corps était un texte formaté comme un corps json (json bien formaté). Fondamentalement, l'en-tête de réponse Content-Type
n'est pas application/json
. HTTPie
forcer le formatage json dans ces cas ?
Commentaire le plus utile
@jkbrzt exactement. En fait, le problème était que les en-têtes du serveur étaient
text/plain
tandis que le corps était un texte formaté comme un corps json (json bien formaté). Fondamentalement, l'en-tête de réponseContent-Type
n'est pasapplication/json
.HTTPie
forcer le formatage json dans ces cas ?