Wyświetlaj wynik curl w czytelnym formacie JSON w skrypcie powłoki Unix

215

W moim skrypcie powłoki Uniksa, kiedy wykonuję polecenie curl, wynik zostanie wyświetlony jak poniżej, do którego przekierowuję do pliku:

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

Ale chcę, aby to wyjście zapisało w czytelnym formacie JSON, jak poniżej w pliku:

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

Jak sformatować dane wyjściowe w ten sposób?

Zacina się
źródło

Odpowiedzi:

533

Spróbuj to zrobić:

curl ... | json_pp 

lub z za pomocą filtra tożsamości:

curl ... | jq '.'

wprowadź opis zdjęcia tutaj

lub z i :

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

Sprawdź https://stedolan.github.io/jq/

Gilles Quenot
źródło
1
Spróbuj najpierw bez przekierowywania do pliku. Czy sprawdziłeś, czy json_pp lub jq jest zainstalowany? Pochodzi z
perlem
1
json_ppwydaje się formatować dane w odwrotnej kolejności niż się spodziewano. Czy istnieje sposób na cofnięcie cofnięcia danych?
Antonio
1
json_pp to narzędzie do komend Perla, które konwertuje niektóre formaty wejściowe i wyjściowe (jeden z nich JSON). Domyślnym formatem wejściowym jest json, a domyślnym formatem wyjściowym jest json z ładną opcją.
Fabijan Bajo,
3
Rozwiązanie potoku do json_pp jest tak eleganckie. dziękuję
andy
1
Rura do węzła jest bardzo elegancka. Dzięki!
Matthew Zackschewski
53

Zgaduję, że chcesz upiększać wyjście JSON. Można to osiągnąć za pomocą Pythona:

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

0xbb
źródło
Dzięki za odpowiedź. Ale nie używam Pythona, używam powłoki. poprowadzisz mnie na muszli
Jams
@Jams, który wykonuje Pythona z powłoki, dając całkiem niezły wydruk.
agconti
Świetne rozwiązanie, ponieważ Python jest fabrycznie zainstalowany.
Gayan Weerakutti
1
Ten skrypt Pythona powoduje błąd „zepsutej rury”, gdy dodam do niego „| head”.
Crouching Kitten
@CrouchingKitten Sam nie widzę tego problemu (być może różnych wersji), ale może to wynikać z headpolecenia odcięcia wyjścia przesyłanego do niego przed osiągnięciem końca, a tym samym „zerwania” potoku. Jeśli zezwolisz headna wykorzystanie całego strumienia danych z potoku, spodziewam się, że błąd się nie pojawi.
code_dredd
19
python -m json.tool
Curl http://127.0.0.1:5000/people/api.json | python -m json.tool

może również pomóc.

Wisznu
źródło
11

Możesz użyć tego modułu węzła

[sudo] npm i -g json; // sugeruj, aby nie używać uprawnień administratora do instalowania modułu węzła

następnie po prostu zwiń |jsonpo zawinięciu. curl http://localhost:8880/test.json |json

NanoNova
źródło
11

To jest dodatek do odpowiedzi Gillesa. Można to zrobić na wiele sposobów, ale osobiście wolę coś lekkiego, łatwego do zapamiętania i powszechnie dostępnego (np. Dostarczanego ze standardowymi instalacjami LTS o preferowanym smaku Linuksa lub łatwym do zainstalowania) na popularnych systemach * nix.

Oto opcje w preferowanej kolejności:

Moduł Python Json.tool

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

zalety: prawie wszędzie dostępne; Wady: brak kodowania kolorami


jq (może wymagać jednorazowej instalacji)

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

Minusy: trzeba zainstalować jq; zalety: kodowanie kolorami i wszechstronność


json_pp (dostępny w Ubuntu 16.04 LTS)

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

Dla użytkowników Ruby

gem install jsonpretty
echo '{"foo": "lorem", "bar": "ipsum"}' | jsonpretty
Zhenhua
źródło
Dzięki @zhenhua! Użyłem cat myFile.json | python -mjson.tool >> myFilePretty.jsonnastępnie otworzyłem w moim edytorze (vim, nie nienawidzę) i uzyskałem kolory.
essa
8

Okazało się, że json_reformat jest bardzo przydatny. Więc właśnie wykonałem następujące czynności:

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

Otóż ​​to!

Raptor
źródło
Jeśli używasz Ubuntu, możesz znaleźć json_reformat w pakiecie yajl-tools.
Kevin
5

Sprawdź curljson

$ pip install curljson
$ curljson -i <the-json-api-url>
mitnk
źródło
1

Motywacja: chcesz wydrukować odpowiedź JSON dla upiększania po żądaniu polecenia curl.

Rozwiązanie : json_pp - narzędzie wiersza poleceń, które konwertuje niektóre formaty wejściowe i wyjściowe (jednym z nich jest JSON). Ten program został skopiowany z json_xs i zmodyfikowany. Domyślnym formatem wejściowym jest json, a domyślnym formatem wyjściowym jest json z ładną opcją.

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

Formula :<someCommand> | json_pp

Przykład :

Żądanie

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

Odpowiedź

{
   "completed" : false,
   "id" : 1,
   "title" : "delectus aut autem",
   "userId" : 1
}
avivamg
źródło