แสดงเอาต์พุต curl ในรูปแบบ JSON ที่อ่านได้ใน Unix shell script


215

ในสคริปต์ Unix shell ของฉันเมื่อฉันรันคำสั่ง curl ผลลัพธ์จะปรากฏดังด้านล่างซึ่งฉันเปลี่ยนเส้นทางไปยังไฟล์:

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

แต่ฉันต้องการเอาท์พุทนี้ไปวางในรูปแบบ JSON ที่อ่านได้ด้านล่างในไฟล์:

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

ฉันจะจัดรูปแบบผลลัพธ์ด้วยวิธีนี้ได้อย่างไร

คำตอบ:


534

ลองทำสิ่งนี้:

curl ... | json_pp 

หรือกับ ใช้ตัวกรองเอกลักษณ์:

curl ... | jq '.'

ป้อนคำอธิบายรูปภาพที่นี่

หรือกับ และ :

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

ตรวจสอบhttps://stedolan.github.io/jq/


1
ลองก่อนโดยไม่เปลี่ยนเส้นทางไปยังไฟล์ คุณได้ทดสอบว่ามีการติดตั้ง json_pp หรือ jq หรือไม่? มันมาพร้อมกับ perl
Gilles Quenot

1
json_ppดูเหมือนว่าจะจัดรูปแบบข้อมูลในลำดับย้อนกลับกว่าที่คาดไว้ มีวิธียกเลิกข้อมูลย้อนกลับหรือไม่
อันโตนิโอ

1
json_pp เป็นโปรแกรมอรรถประโยชน์คำสั่ง Perl ซึ่งแปลงระหว่างรูปแบบอินพุตและเอาต์พุตบางรูปแบบ (หนึ่งในนั้นคือ JSON) รูปแบบอินพุตเริ่มต้นคือ json และรูปแบบเอาต์พุตเริ่มต้นคือ json พร้อมตัวเลือกสวย
Fabijan Bajo

3
ไปป์กับโซลูชัน json_pp สวยงามมาก ขอบคุณ
andy

1
ไปป์ที่โหนดนั้นสวยงามมาก ขอบคุณ!
Matthew Zackschewski

53

ฉันคาดเดาว่าคุณต้องการเพิ่มเอาท์พุต JSON ไว้ล่วงหน้า ที่สามารถทำได้โดยใช้หลาม:

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


ขอบคุณสำหรับคำตอบ. แต่ฉันไม่ได้ใช้ Python ฉันใช้เชลล์ คุณสามารถแนะนำฉันเกี่ยวกับเชลล์ได้ไหม
Jams

@Jams ที่ดำเนินการ python จากเชลล์ให้ผลลัพธ์ที่พิมพ์ออกมาสวย
agconti

วิธีแก้ปัญหาที่ยอดเยี่ยมเมื่อติดตั้งงูหลามไว้ล่วงหน้า
Gayan Weerakutti

1
สคริปต์ python นั้นให้ข้อผิดพลาด "pipe เสีย" เมื่อฉันเพิ่ม "| head" ลงไป
หมอบลูกแมว

@CrouchingKitten ฉันไม่เห็นปัญหานั้นด้วยตัวเอง (อาจเป็นรุ่นที่แตกต่างกัน) แต่นั่นอาจเป็นเพราะheadคำสั่งที่ตัดการส่งออกที่ถูกไพพ์ไปก่อนที่จะถึงจุดสิ้นสุดดังนั้นจึง "ทำลาย" ท่อ หากคุณอนุญาตให้headใช้กระแสข้อมูลทั้งหมดจากไปป์ฉันคาดว่าข้อผิดพลาดจะไม่ปรากฏขึ้น
code_dredd


11

คุณสามารถใช้โมดูลโหนดนี้

[sudo] npm i -g json; // ไม่แนะนำให้ใช้สิทธิ์พิเศษในการติดตั้งโมดูลโหนด

จากนั้นก็ต่อท้าย|jsonขด curl http://localhost:8880/test.json |json


11

นี่คือการเพิ่มคำตอบของ Gilles มีหลายวิธีในการทำให้เสร็จ แต่โดยส่วนตัวแล้วฉันชอบบางสิ่งบางอย่างที่เบาง่ายต่อการจดจำและมีอยู่ทั่วไป (เช่นมาพร้อมกับการติดตั้ง LTS มาตรฐานของ Linux รสที่คุณต้องการหรือติดตั้งง่าย) บนระบบ * nix ทั่วไป

นี่คือตัวเลือกตามลำดับที่ต้องการ:

โมดูล Pson Json.tool

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

ข้อดี: เกือบทุกที่; ข้อเสีย: ไม่มีการเข้ารหัสสี


jq (อาจต้องติดตั้งครั้งเดียว)

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

ข้อเสีย: จำเป็นต้องติดตั้ง jq; ข้อดี: การเข้ารหัสสีและหลากหลาย


json_pp (มีใน Ubuntu 16.04 LTS)

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

สำหรับผู้ใช้ Ruby

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

ขอบคุณ @zhenhua! ฉันใช้ cat myFile.json | python -mjson.tool >> myFilePretty.jsonแล้วเปิดในตัวแก้ไขของฉัน (เป็นกลุ่มไม่ได้เกลียด) และมีสี
Essa

8

ฉันพบว่า json_reformat มีประโยชน์มาก ดังนั้นฉันเพิ่งทำต่อไปนี้:

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

แค่นั้นแหละ!


หากใช้ Ubuntu คุณสามารถค้นหา json_reformat ในแพ็คเกจ yajl-tools
Kevin


1

แรงจูงใจ:คุณต้องการพิมพ์การตอบสนอง JSON ล่วงหน้าหลังจากคำขอคำสั่ง curl

โซลูชัน : json_pp - เครื่องมือบรรทัดคำสั่งที่แปลงระหว่างรูปแบบอินพุตและเอาต์พุตบางรูปแบบ (หนึ่งในนั้นคือ JSON) โปรแกรมนี้ถูกคัดลอกมาจาก json_xs และแก้ไข รูปแบบอินพุตเริ่มต้นคือ json และรูปแบบเอาต์พุตเริ่มต้นคือ json พร้อมตัวเลือกสวย

การสรุป : json_pp [-v] [-f from_format] [-t to_format] [-json_opt options_to_json1[,options_to_json2[,...]]]

สูตร :<someCommand> | json_pp

ตัวอย่าง :

ขอร้อง

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

คำตอบ

{
   "completed" : false,
   "id" : 1,
   "title" : "delectus aut autem",
   "userId" : 1
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.