Exibir saída de ondulação no formato JSON legível no script de shell Unix

213

No meu script de shell Unix, quando executo um comando curl, o resultado será exibido como abaixo do qual estou redirecionando para o arquivo:

{"type":"Show","id":"123","title":"name","description":"Funny","channelTitle":"ifood.tv","lastUpdateTimestamp":"2014-04-20T20:34:59","numOfVideos":"15"}

Mas, eu quero que esta saída coloque no formato JSON legível como abaixo no arquivo:

{"type":"Show",
"id":"123",
"title":"name",
"description":"Funny",
"channelTitle":"ifood.tv",
"lastUpdateTimestamp":"2014-04-20T20:34:59",
"numOfVideos":"15"}

Como formatar a saída dessa maneira?

Geléias
fonte

Respostas:

532

Tente fazer isso:

curl ... | json_pp 

ou com usando o filtro de identidade:

curl ... | jq '.'

insira a descrição da imagem aqui

ou com e :

curl ... | node <<< "var o = $(cat); console.log(JSON.stringify(o, null, 4));"

Verifique https://stedolan.github.io/jq/

Gilles Quenot
fonte
1
Tente primeiro sem redirecionar para um arquivo. Você já testou se json_pp ou jq está instalado? Ele vem com perl
Gilles Quenot
1
json_ppparece formatar os dados na ordem inversa do que o esperado. Existe uma maneira de cancelar a reversão de dados?
Antonio
1
json_pp é um utilitário de comando Perl que converte entre alguns formatos de entrada e saída (um deles JSON). O formato de entrada padrão é json e o formato de saída padrão é json com a opção pretty.
Fabijan Bajo
3
a solução pipe to json_pp é tão elegante. obrigado
andy
1
O canal no nó é muito elegante. Obrigado!
Matthew Zackschewski
53

Eu estou supondo que você deseja prettify a saída JSON. Isso pode ser alcançado usando python:

curl http://localhost:8880/test.json | python -mjson.tool > out.json

0xbb
fonte
Obrigado por responder. Mas eu não estou usando Python, estou usando shell. pode orientar u me no escudo
Jams
@ Jam que executa python a partir do shell, fornecendo uma saída bastante impressa.
agconti
Ótima solução como python vem pré-instalado.
Gayan Weerakutti 13/03/19
1
Esse script python fornece um erro "pipe quebrado" quando adiciono uma "| cabeça" a ele.
Crouching Kitten
@CrouchingKitten Eu mesmo não vejo esse problema (talvez versões diferentes), mas isso pode ser devido ao headcomando que interrompe a saída da tubulação antes de chegar ao final, "quebrando" o cano. Se você permitir headconsumir todo o fluxo de dados do canal, esperaria que o erro não fosse exibido.
code_dredd
19
python -m json.tool
Curl http://127.0.0.1:5000/people/api.json | python -m json.tool

também pode ajudar.

Vishnu
fonte
11

Você pode usar este módulo de nó

[sudo] npm i -g json; // sugere não usar privilégios de root para instalar o módulo do nó

basta acrescentar |jsondepois de enrolar. curl http://localhost:8880/test.json |json

NanoNova
fonte
11

Isso é para adicionar à resposta de Gilles. Existem várias maneiras de fazer isso, mas pessoalmente eu prefiro algo leve, fácil de lembrar e universalmente disponível (por exemplo, vem com instalações LTS padrão do seu gosto Linux ou fácil de instalar) em sistemas comuns * nix.

Aqui estão as opções em sua ordem preferida:

Módulo Python Json.tool

echo '{"foo": "lorem", "bar": "ipsum"}' | python -mjson.tool

prós: quase disponível em qualquer lugar; contras: sem código de cores


jq (pode exigir uma instalação única)

echo '{"foo": "lorem", "bar": "ipsum"}' | jq

contras: precisa instalar o jq; profissionais: código de cores e versátil


json_pp (disponível no Ubuntu 16.04 LTS)

echo '{"foo": "lorem", "bar": "ipsum"}' | json_pp

Para usuários Ruby

gem install jsonpretty
echo '{"foo": "lorem", "bar": "ipsum"}' | jsonpretty
Zhenhua
fonte
Obrigado @zhenhua! Eu costumava cat myFile.json | python -mjson.tool >> myFilePretty.jsonabrir no meu editor (vim, não odeio) e tenho cores.
Essa
8

Achei o json_reformat muito útil. Então, eu fiz o seguinte:

curl http://127.0.0.1:5000/people/api.json | json_reformat

é isso aí!

Raptor
fonte
Se você estiver usando o Ubuntu, poderá encontrar o json_reformat no pacote yajl-tools.
Kevin
5

Confira curljson

$ pip install curljson
$ curljson -i <the-json-api-url>
mitnk
fonte
1

Motivação: você deseja imprimir a resposta JSON de pré-definição após a solicitação do comando curl.

Solução : json_pp - ferramenta de linha de comando que converte entre alguns formatos de entrada e saída (um deles é JSON). Este programa foi copiado do json_xs e modificado. O formato de entrada padrão é json e o formato de saída padrão é json com a opção pretty.

Sinopse : json_pp [-v] [-f from_format] [-t to_format] [-json_opt options_to_json1[,options_to_json2[,...]]]

Fórmula :<someCommand> | json_pp

Exemplo :

Solicitação

curl -X https://jsonplaceholder.typicode.com/todos/1 | json_pp 

Resposta

{
   "completed" : false,
   "id" : 1,
   "title" : "delectus aut autem",
   "userId" : 1
}
avivamg
fonte