แปลง JSON ด้วย jq: คู่มือแบบอินเทอร์แอ็กทีฟ
(navendu.me)- jq เป็นเครื่องมือบรรทัดคำสั่งสำหรับจัดการข้อมูล JSON และมักติดตั้งมาให้โดยค่าเริ่มต้นใน Linux distribution ส่วนใหญ่
- มีประโยชน์สำหรับการแสดงผล JSON ให้อ่านง่าย (pretty print) หรือแปลงข้อมูลด้วยการใช้ฟิลเตอร์
- เป็นเครื่องมือที่ทรงพลังมากจนถูกนับรวมอยู่ใน 5 เครื่องมือ CLI ที่นักพัฒนาควรต้องเรียนรู้ และช่วยให้ทำงานกับข้อมูล JSON ได้หลากหลายแบบอย่างง่ายดาย
การติดตั้ง jq และการใช้งานพื้นฐาน
-
วิธีติดตั้ง
- สามารถติดตั้ง jq ได้ผ่าน package manager ส่วนใหญ่ หรือดาวน์โหลดไบนารีโดยตรง หรือคอมไพล์จากซอร์สก็ได้
- หลังติดตั้งแล้วสามารถตรวจสอบการทำงานได้ด้วยคำสั่ง
jq
-
ตัวอย่างการใช้งานพื้นฐาน
- แสดงผลข้อมูล JSON ให้อ่านง่าย:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq
- แสดงผลข้อมูล JSON ให้อ่านง่าย:
-
ตัวอย่างฟิลเตอร์ JSON
- กรองข้อมูลตามเงื่อนไขที่กำหนด:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ '.[] | select(.address.city == "South Christy") | {name, username, email}'
- กรองข้อมูลตามเงื่อนไขที่กำหนด:
ความสามารถหลักของ jq
ฟิลเตอร์พื้นฐาน
-
ฟิลเตอร์ Identity
- แสดงข้อมูลอินพุตออกมาโดยไม่เปลี่ยนแปลง:
echo '{"id":1,"name":"Leanne Graham","website":"hildegard.org"}' | jq '.'
- แสดงข้อมูลอินพุตออกมาโดยไม่เปลี่ยนแปลง:
-
เข้าถึงฟิลด์เฉพาะ
- เลือกฟิลด์เฉพาะจากอ็อบเจ็กต์ JSON:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq '.name' - เข้าถึงฟิลด์แบบซ้อน:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq '.address.zipcode'
- เลือกฟิลด์เฉพาะจากอ็อบเจ็กต์ JSON:
การจัดการอาร์เรย์
-
เข้าถึงสมาชิกในอาร์เรย์
- เลือกสมาชิกที่ดัชนีที่ต้องการจากอาร์เรย์ JSON:
curl 'https://jsonplaceholder.typicode.com/users' | jq '.[0]'
- เลือกสมาชิกที่ดัชนีที่ต้องการจากอาร์เรย์ JSON:
-
สไลซ์อาร์เรย์
- ดึงอาร์เรย์ย่อยในช่วงที่กำหนด:
curl 'https://jsonplaceholder.typicode.com/users' | jq '.[3:6]'
- ดึงอาร์เรย์ย่อยในช่วงที่กำหนด:
-
วนประมวลผลอาร์เรย์
- ใช้ฟิลเตอร์กับแต่ละสมาชิกในอาร์เรย์:
curl 'https://jsonplaceholder.typicode.com/users' | jq '.[] | {name, email}'
- ใช้ฟิลเตอร์กับแต่ละสมาชิกในอาร์เรย์:
สร้าง JSON ใหม่
-
สร้างอ็อบเจ็กต์ใหม่
- สร้างอ็อบเจ็กต์ JSON ใหม่จากฟิลด์ที่เลือก:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq \ '{"name": .name, "email": .email, "company": .company.name}'
- สร้างอ็อบเจ็กต์ JSON ใหม่จากฟิลด์ที่เลือก:
-
สร้างอาร์เรย์ใหม่
- สร้างอาร์เรย์จากข้อมูลที่แปลงแล้ว:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ '[.[] | {name: .name, email: .email, company: .company.name}]'
- สร้างอาร์เรย์จากข้อมูลที่แปลงแล้ว:
ความสามารถขั้นสูงของ jq
การใช้ฟังก์ชัน
-
คำนวณความยาว
- คำนวณความยาวของสตริง:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq '.name | length'
- คำนวณความยาวของสตริง:
-
ดึงคีย์
- คืนค่าคีย์ของอ็อบเจ็กต์เป็นอาร์เรย์:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq 'keys'
- คืนค่าคีย์ของอ็อบเจ็กต์เป็นอาร์เรย์:
-
ฟังก์ชัน map
- ใช้ฟิลเตอร์กับแต่ละสมาชิกของอาร์เรย์:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ 'map({name: .name, city: .address.city})'
- ใช้ฟิลเตอร์กับแต่ละสมาชิกของอาร์เรย์:
การเลือกข้อมูล
- เลือกข้อมูลตามเงื่อนไข
- กรองข้อมูลที่ตรงตามเงื่อนไขที่กำหนด:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ '.[] | select(.address.city == "South Christy")'
- กรองข้อมูลที่ตรงตามเงื่อนไขที่กำหนด:
การแปลงและการนำ JSON ไปใช้งาน
-
การแปลง JSON ขั้นสูง
- ฟิลเตอร์สำหรับจัดกลุ่มข้อมูลหรือคำนวณสถิติ:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ 'group_by(.address.city) | map({ city: .[0].address.city, user_count: length, users: [.[] | {name: .name, username: .username}] })'
- ฟิลเตอร์สำหรับจัดกลุ่มข้อมูลหรือคำนวณสถิติ:
-
จัดการ JSON ขนาดใหญ่
- ประมวลผลข้อมูล JSON ปริมาณมากได้อย่างมีประสิทธิภาพ:
curl 'https://api.github.com/repos/apache/apisix/contributors?per_page=100' | jq \ 'sort_by(.contributions) | reverse | map({username: .login, contributions}) | .[0:5]'
- ประมวลผลข้อมูล JSON ปริมาณมากได้อย่างมีประสิทธิภาพ:
-
สามารถลองใช้งานได้ที่ jq Playground
3 ความคิดเห็น
ขอบคุณสำหรับสรุปนะครับ! เป็นข้อมูลที่มีประโยชน์มากจริง ๆ
> ทรงพลังถึงขนาดถูกจัดให้อยู่ใน 5 เครื่องมือ CLI ที่นักพัฒนาควรต้องเรียนรู้,
แต่ก็อดสงสัยไม่ได้ว่าเครื่องมือ CLI อีก 4 ตัวที่เหลือคืออะไร ซึ่งในบทความก็ไม่ได้พูดถึงเลย เลยกลายเป็นเหมือน MacGuffin ไปซะงั้น..
https://navendu.me/posts/jq-interactive-guide/….
พอไปดูต้นฉบับก็เห็นว่า
> jq is on every “five command line tools to learn as a developer” video on YouTube.
มีข้อความแบบนี้อยู่ครับ
อีก 4 ตัวไม่ได้ระบุไว้เป็นพิเศษ แต่ดูเหมือนว่าในคลิปแนวแนะนำ CLI tool แบบนั้นจะมีการพูดถึงมันตลอดเลย 555