Hiển thị đầu ra curl ở định dạng JSON có thể đọc được trong tập lệnh shell Unix


213

Trong tập lệnh shell Unix của tôi, khi tôi thực thi lệnh curl, kết quả sẽ được hiển thị như bên dưới mà tôi đang chuyển hướng đến tệp:

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

Nhưng, tôi muốn đầu ra này đặt ở định dạng JSON có thể đọc được như bên dưới trong tệp:

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

Làm thế nào để tôi định dạng đầu ra theo cách này?

Câu trả lời:


531

Hãy thử làm điều này:

curl ... | json_pp 

Hoặc với sử dụng bộ lọc nhận dạng:

curl ... | jq '.'

nhập mô tả hình ảnh ở đây

Hoặc với :

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

Kiểm tra https://stedolan.github.io/jq/


1
Hãy thử đầu tiên mà không chuyển hướng đến một tập tin. Bạn đã kiểm tra nếu json_pp hoặc jq được cài đặt chưa? Nó đi kèm với perl
Gilles Quenot

1
json_ppdường như định dạng dữ liệu theo thứ tự ngược lại so với dự kiến. Có cách nào để đảo ngược dữ liệu?
Antonio

1
json_pp là một tiện ích lệnh Perl chuyển đổi giữa một số định dạng đầu vào và đầu ra (một trong số chúng là JSON). Định dạng đầu vào mặc định là json và định dạng đầu ra mặc định là json với tùy chọn khá đẹp.
Fabijan Bajo

3
giải pháp đường ống đến json_pp rất thanh lịch. cảm ơn bạn
andy

1
Các ống vào nút là rất thanh lịch. Cảm ơn!
Matthew Zackschewski

53

Tôi đoán rằng bạn muốn cải thiện đầu ra JSON. Điều đó có thể đạt được bằng cách sử dụng python:

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


Cảm ơn đã trả lời. Nhưng tôi không sử dụng Python, tôi đang sử dụng shell. bạn có thể hướng dẫn tôi trên vỏ
Jams

@Jams thực thi python từ shell cho ra một bản in đẹp.
agconti

Giải pháp tuyệt vời như python được cài đặt sẵn.
Gayan Weerakutti

1
Tập lệnh python đó có lỗi "ống bị hỏng" khi tôi thêm "| head" vào nó.
Ngọa mèo con

@CrouchingKitten Bản thân tôi không thấy vấn đề đó (có thể là các phiên bản khác nhau), nhưng đó có thể là do headlệnh cắt đứt đầu ra được dẫn đến trước khi kết thúc, do đó "phá vỡ" đường ống. Nếu bạn cho phép headtiêu thụ toàn bộ luồng dữ liệu từ đường ống, tôi hy vọng lỗi sẽ không xuất hiện.
code_dredd

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

cũng có thể giúp đỡ


11

Bạn có thể sử dụng mô-đun nút này

[sudo] npm i -g json; // đề nghị không sử dụng đặc quyền gốc để cài đặt mô-đun nút

sau đó chỉ đơn giản là nối |jsonsau khi curl. curl http://localhost:8880/test.json |json


11

Điều này là để thêm vào câu trả lời của Gilles. Có nhiều cách để thực hiện điều này nhưng cá nhân tôi thích thứ gì đó nhẹ, dễ nhớ và có sẵn trên toàn cầu (ví dụ: đi kèm với các bản cài đặt LTS tiêu chuẩn của hương vị Linux ưa thích của bạn hoặc dễ cài đặt) trên các hệ thống * nix thông thường.

Dưới đây là các tùy chọn theo thứ tự ưa thích của họ:

Mô-đun Python Json.tool

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

ưu: hầu như có sẵn ở mọi nơi; Nhược điểm: không mã hóa màu


jq (có thể yêu cầu cài đặt một lần)

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

Nhược điểm: cần cài đặt jq; ưu điểm: mã màu và đa năng


json_pp (có sẵn trong Ubuntu 16.04 LTS)

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

Dành cho người dùng Ruby

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

Cảm ơn @zhenhua! Tôi đã sử dụng cat myFile.json | python -mjson.tool >> myFilePretty.jsonsau đó mở trong trình soạn thảo của mình (vim, đừng ghét) và có màu sắc.
tiểu luận

8

Tôi thấy json_Vformat rất tiện dụng. Vì vậy, tôi chỉ làm như sau:

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

đó là nó!


Nếu sử dụng Ubuntu, bạn có thể tìm thấy json_Vformat trong gói công cụ yajl.
Kevin


1

Động lực: Bạn muốn in phản hồi JSON sau khi yêu cầu lệnh curl.

Giải pháp : json_pp - công cụ dòng lệnh chuyển đổi giữa một số định dạng đầu vào và đầu ra (một trong số đó là JSON). Chương trình này đã được sao chép từ json_xs và sửa đổi. Định dạng đầu vào mặc định là json và định dạng đầu ra mặc định là json với tùy chọn khá đẹp.

Hội thảo : json_pp [-v] [-f from_format] [-t to_format] [-json_opt options_to_json1[,options_to_json2[,...]]]

Công thức :<someCommand> | json_pp

Ví dụ :

Yêu cầu

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

Phản ứng

{
   "completed" : false,
   "id" : 1,
   "title" : "delectus aut autem",
   "userId" : 1
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.