Como imprimir um corpo de saída JSON para formatá-lo no console bash como
macbookproloreto:~ admin$ echo '{"foo": "lorem", "bar": "ipsum"}' | python -m json.tool
{
"bar": "ipsum",
"foo": "lorem"
}
Meu comando parece agora
http --session=cookies.txt --pretty all --json --print=b --style=xcode "https://myapi.company.com | python -m json.tool
A opção --pretty
tem
'{"foo": "lorem", "bar": "ipsum"}'
Isso funciona fora da caixa:
@jkbrzt sim, mas esta não é a resposta body
. Parece que não embeleza o corpo mas apenas o headers
.
@loretoparisi é o corpo da resposta, veja http://httpbin.org/get
Ok, encontrei o problema, há algo errado nos cabeçalhos de resposta. Na verdade, se eu tentar um corpo de resposta bem formatado com formato json como:
http --session=cookies.txt --pretty all --json --print=b --style=xcode "https://api.spotify.com/v1/tracks/0eGsygTp906u18L0Oimnem"
funciona.
Quando os cabeçalhos de resposta http são text/plain
HTTP/1.1 200 OK
Connection: keep-alive
Content-Encoding: gzip
Content-Length: 1996
Content-Type: text/plain; charset=utf-8
a formatação resultante é simples.
HTTPie olha para o cabeçalho de resposta Content-Type
. Se for text/plain
, não fará nenhuma formatação especial. O URL que você forneceu retorna Content-Type: application/json; charset=utf-8
para que seja formatado corretamente e destacado como JSON.
@jkbrzt exatamente. Na verdade, o problema era que os cabeçalhos do servidor eram text/plain
enquanto o corpo era um texto formatado como um corpo json (json bem formatado). Basicamente, o cabeçalho de resposta Content-Type
não é application/json
. HTTPie
forçar a formatação do json nesses casos?
Comentários muito úteis
@jkbrzt exatamente. Na verdade, o problema era que os cabeçalhos do servidor eram
text/plain
enquanto o corpo era um texto formatado como um corpo json (json bem formatado). Basicamente, o cabeçalho de respostaContent-Type
não éapplication/json
.HTTPie
forçar a formatação do json nesses casos?