Tampilkan output curl dalam format JSON yang dapat dibaca dalam skrip Unix shell


215

Dalam skrip Unix shell saya, ketika saya menjalankan perintah curl, hasilnya akan ditampilkan seperti di bawah ini yang saya arahkan ke file:

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

Tapi, saya ingin output ini dimasukkan ke dalam format JSON yang dapat dibaca seperti di bawah ini dalam file:

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

Bagaimana cara memformat output dengan cara ini?

Jawaban:


537

Coba lakukan ini:

curl ... | json_pp 

atau dengan menggunakan filter identitas:

curl ... | jq '.'

masukkan deskripsi gambar di sini

atau dengan dan :

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

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


bisakah Anda sedikit rumit di sini
Jams

1
json_pptampaknya memformat data dalam urutan terbalik dari yang diharapkan. Apakah ada cara untuk membatalkan data?
Antonio

1
json_pp adalah utilitas perintah Perl yang mengkonversi antara beberapa format input dan output (salah satunya JSON). Format input default adalah json dan format output default adalah json dengan opsi cantik.
Fabijan Bajo

3
solusi pipa ke json_pp sangat elegan. terima kasih
andy

1
Pipa menjadi simpul sangat elegan. Terima kasih!
Matthew Zackschewski

53

Saya menduga Anda ingin melakukan prettify output JSON. Itu bisa dicapai dengan menggunakan python:

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

Terimakasih telah menjawab. Tetapi saya tidak menggunakan Python, saya menggunakan shell. bisakah kamu membimbing saya dengan shell
Jams

@ Jam yang mengeksekusi python dari shell memberi Anda hasil cetak yang cantik.
agconti

Solusi hebat karena python sudah diinstal sebelumnya.
Gayan Weerakutti

1
Skrip python itu memberikan kesalahan "pipa rusak" ketika saya menambahkan "| head" ke dalamnya.
Crouching Kitten

@CrouchingKitten Saya tidak melihat masalah itu sendiri (mungkin versi yang berbeda), tapi itu mungkin karena headperintah memotong output yang disalurkan ke pipa sebelum mencapai akhir, sehingga "memecahkan" pipa. Jika Anda mengizinkan headuntuk mengkonsumsi seluruh aliran data dari pipa, saya berharap kesalahan tidak muncul.
code_dredd

19
python -m json.tool
Curl http://127.0.0.1:5000/people/api.json | python -m json.tool

bisa juga membantu.


11

Anda dapat menggunakan modul simpul ini

[sudo] npm i -g json; // sarankan tidak menggunakan root privilege untuk menginstal modul node

maka cukup tambahkan |jsonsetelah keriting. curl http://localhost:8880/test.json |json


11

Ini untuk menambah dari Jawaban Gilles. Ada banyak cara untuk menyelesaikan ini, tetapi secara pribadi saya lebih suka sesuatu yang ringan, mudah diingat dan tersedia secara universal (misalnya datang dengan instalasi LTS standar rasa Linux pilihan Anda atau mudah dipasang) pada sistem * nix umum.

Berikut adalah opsi dalam urutan pilihan mereka:

Modul Python Json.tool

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

pro: hampir tersedia di mana-mana; kontra: tidak ada kode warna


jq (mungkin memerlukan satu kali instalasi)

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

Cons: perlu menginstal jq; pro: kode warna dan serbaguna


json_pp (tersedia di Ubuntu 16.04 LTS)

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

Untuk pengguna Ruby

gem install jsonpretty
echo '{"foo": "lorem", "bar": "ipsum"}' | jsonpretty

@Zhenhua terima kasih! Saya digunakan cat myFile.json | python -mjson.tool >> myFilePretty.jsonkemudian dibuka di editor saya (vim, jangan benci) dan mendapat warna.
essa

8

Saya menemukan json_reformat sangat berguna. Jadi saya hanya melakukan yang berikut:

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

itu dia!


Jika menggunakan Ubuntu Anda dapat menemukan json_reformat di paket yajl-tools.
Kevin


1

Motivasi: Anda ingin mencetak respons JSON yang cantik setelah permintaan perintah ikal.

Solusi : json_pp - alat commandline yang mengkonversi antara beberapa format input dan output (salah satunya adalah JSON). Program ini disalin dari json_xs dan dimodifikasi. Format input default adalah json dan format output default adalah json dengan opsi cantik.

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

Formula :<someCommand> | json_pp

Contoh :

Permintaan

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

Tanggapan

{
   "completed" : false,
   "id" : 1,
   "title" : "delectus aut autem",
   "userId" : 1
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.