jq: มีดพกสาย CLI สำหรับกรอง แปลง และจัดการ JSON อย่างมืออาชีพ
jq ไม่ได้มีไว้แค่จัดรูปแบบ JSON ให้อ่านง่าย แต่ยังเป็นเครื่องมือทรงพลังสำหรับกรอง แปลง คำนวณ และประกอบข้อมูลได้อย่างรวดเร็วบน command line เหมาะอย่างยิ่งสำหรับงาน API, DevOps, backend และ data workflow ในชีวิตจริง

jq มักถูกมองว่าเป็นเครื่องมือเอาไว้ pretty print JSON เท่านั้น แต่ความจริงแล้วมันคือหนึ่งใน utility ที่ทรงพลังที่สุดบน command line สำหรับคนที่ทำงานกับข้อมูลแบบ JSON อยู่เป็นประจำ ไม่ว่าจะเป็นนักพัฒนา backend, สาย DevOps, คนทำ data pipeline หรือแม้แต่มือใหม่ที่อยากจัดการข้อมูลให้เร็วขึ้นโดยไม่ต้องเขียนสคริปต์ยาว ๆ
จุดแข็งของ jq คือการอ่าน JSON แล้วดึงเฉพาะส่วนที่ต้องการออกมาได้ทันที ช่วยลดขั้นตอนการเปิด editor การไล่หา key ทีละชั้น หรือการเขียนโค้ดชั่วคราวเพื่อแค่ดูข้อมูลบางส่วน ทำให้ workflow บน terminal ลื่นและมีประสิทธิภาพมากขึ้น
jq คืออะไร และทำไมถึงควรใช้
jq คือเครื่องมือบน command line สำหรับประมวลผล JSON แบบมืออาชีพ โดยใช้แนวคิดของ filter หรือ pipeline ในการค่อย ๆ ส่งข้อมูลผ่านขั้นตอนต่าง ๆ จนได้ผลลัพธ์สุดท้าย แนวทางนี้คล้ายการคิดแบบ functional pipeline ซึ่งช่วยให้ทั้งการอ่านคำสั่งและการออกแบบกระบวนการจัดการข้อมูลเป็นระบบมากขึ้น
ข้อดีสำคัญของ jq คือ
- ใช้งานได้รวดเร็วโดยไม่ต้องเปิดโปรแกรมเพิ่มเติม
- ดึงข้อมูลเฉพาะจุดจาก JSON ที่ซับซ้อนได้ง่าย
- ใช้กรอง แปลง และจัดรูปข้อมูลได้ในคำสั่งเดียว
- ทำงานร่วมกับเครื่องมือ CLI อื่น เช่น
curl,cat,grep,xargsได้อย่างลื่นไหล - เหมาะกับงาน ad-hoc ที่ต้องลองคำสั่งและดูผลลัพธ์ทันที
ตัวอย่างพื้นฐานที่ควรรู้
หากมี JSON ดังนี้
{ "name": "Mina", "age": 28, "skills": ["Go", "Python"] }
หากต้องการดึงชื่อออกมา ใช้คำสั่ง
jq '.name'
ผลลัพธ์คือ
"Mina"
ถ้าต้องการไล่สมาชิกใน array ของ skills ออกมาทีละรายการ ใช้คำสั่ง
jq '.skills[]'
ผลลัพธ์คือ
Go
Python
นี่คือภาพรวมที่ทำให้เห็นว่า jq ช่วยให้การเข้าถึงข้อมูลใน JSON เป็นเรื่องง่ายมาก แม้ข้อมูลจะซ้อนกันหลายชั้นก็ตาม
ความสามารถที่มากกว่าแค่ดูข้อมูล
สิ่งที่ทำให้ jq โดดเด่นคือมันไม่ได้มีไว้แค่ดูข้อมูล แต่สามารถแปลงข้อมูลได้ด้วย ซึ่งเป็นเหตุผลสำคัญที่หลายคนเรียกมันว่า “มีดพกของสาย CLI”
เลือกเฉพาะ field ที่สำคัญ
jq '{name, age}' file.json
คำสั่งนี้ช่วยดึงเฉพาะ field ที่ต้องการออกมา เหมาะเมื่อ JSON ต้นฉบับมีข้อมูลจำนวนมาก แต่เราสนใจเพียงไม่กี่ค่า
กรอง array ตามเงื่อนไข
jq '.users[] | select(.age > 25)' file.json
ใช้เลือกเฉพาะสมาชิกใน array ที่ตรงตามเงื่อนไข เช่น เลือกผู้ใช้ที่อายุมากกว่า 25 ปี
ดึงค่าหลายชั้นจาก API response
curl https://api.example.com/users | jq '.data[].email'
ตัวอย่างนี้แสดงให้เห็นว่า jq ใช้งานร่วมกับ API ได้ดีมาก โดยสามารถดึงเฉพาะ email จาก response ที่มีโครงสร้างซ้อนกันได้ทันที
นับจำนวนข้อมูลใน array
jq '.items | length'
เหมาะสำหรับกรณีที่ต้องการตรวจสอบจำนวนรายการ เช่น จำนวน user, จำนวน error หรือจำนวน object ใน response
รวมข้อความจากหลาย field
jq '.users[] | "\(.firstName) \(.lastName)"'
สามารถประกอบข้อความใหม่จากข้อมูลหลาย field ได้ เหมาะสำหรับสร้าง output ที่อ่านง่ายขึ้น
แปลง array ให้เป็นรูปแบบใหม่
jq 'map({id, name})'
เป็นตัวอย่างของการ reshape ข้อมูล โดยเปลี่ยนโครงสร้างของ array ให้เหลือเฉพาะข้อมูลที่จำเป็นต่อการใช้งาน
ตัวอย่างการใช้งานจริงในงานประจำวัน
jq เป็นเครื่องมือที่มีประโยชน์มากในงานจริง โดยเฉพาะเมื่อระบบสมัยใหม่จำนวนมากส่งข้อมูลออกมาในรูปแบบ JSON เช่น REST API, cloud CLI หรือระบบ orchestration ต่าง ๆ
ตัวอย่างงานที่ jq ช่วยได้บ่อย ได้แก่
- อ่าน response จาก REST API
- ตรวจสอบ log ที่เป็น JSON
- จัดรูป config file
- ทำ data pipeline ขนาดเล็ก
- ใช้ใน shell script หรือกระบวนการ CI/CD
สาย DevOps มักชอบ jq เพราะใช้งานร่วมกับเครื่องมืออย่าง curl, kubectl, aws, gcloud ได้ดีมาก ขณะที่สาย backend ใช้เพื่อ debug response ให้เร็วขึ้น และสาย data สามารถใช้คัดกรองข้อมูลก่อนส่งต่อไปยังขั้นตอนถัดไปได้อย่างสะดวก
ตัวอย่างที่ทรงพลังเมื่อใช้กับ API
ตัวอย่างที่ใช้งานได้จริงมากคือการดึงสินค้าจาก API แล้วกรองเฉพาะรายการที่มีราคามากกว่า 100 พร้อมเลือกเฉพาะ field ที่ต้องการ
curl https://dummyjson.com/products | jq '.products[] | select(.price > 100) | {title, price}'
คำสั่งเดียวนี้ทำได้ครบทั้ง
- ดึงข้อมูลจาก API
- กรองสินค้าตามเงื่อนไขราคา
- เลือกเฉพาะ field ที่ต้องการ
- จัดรูปผลลัพธ์ให้อ่านง่าย
นี่คือจุดแข็งของ jq อย่างแท้จริง เพราะช่วยลดงานที่เดิมอาจต้องเขียนโค้ด Python หรือ JavaScript สั้น ๆ ให้เหลือเพียงคำสั่งบรรทัดเดียว
รูปแบบคำสั่งพื้นฐานที่มือใหม่ควรจำ
สำหรับผู้เริ่มต้น วิธีเรียนรู้ jq ที่ดีคือจำ pattern หลักให้ได้ก่อน เพราะเพียงไม่กี่รูปแบบก็สามารถต่อยอดไปทำงานได้อีกมาก
.fieldสำหรับดึงค่าจาก field.array[]สำหรับไล่สมาชิกใน arrayselect(...)สำหรับกรองข้อมูลตามเงื่อนไขlengthสำหรับนับจำนวนข้อมูลmap(...)สำหรับแปลงข้อมูลเป็นรูปแบบใหม่
เมื่อเริ่มคล่องกับ pattern เหล่านี้ จะพบว่างานหลายอย่างที่เคยคิดว่าต้องใช้สคริปต์สั้น ๆ แท้จริงแล้วสามารถจบได้ด้วย jq เพียงบรรทัดเดียว
jq ช่วยเปลี่ยนวิธีคิดในการทำงานอย่างไร
นอกจากประโยชน์เชิงเทคนิค jq ยังช่วยฝึกการคิดแบบเป็นขั้นตอน เพราะการใช้งานส่วนใหญ่จะเริ่มจากรับข้อมูลเข้ามา แล้วค่อย ๆ pipe ผ่าน filter หลายชั้นจนได้ผลลัพธ์สุดท้าย วิธีคิดนี้มีประโยชน์มากทั้งต่อการเขียน shell script การออกแบบ data flow และการแก้ปัญหาเฉพาะหน้าบน terminal
อีกจุดเด่นหนึ่งคือความเหมาะกับงาน ad-hoc อย่างมาก ผู้ใช้สามารถเปิด terminal ทดลองคำสั่ง ดูผลลัพธ์ทันที แล้วปรับ filter ต่อได้อย่างรวดเร็ว โดยไม่เสีย flow ของการทำงาน
สรุป
jq เป็นเครื่องมือเล็กแต่ทรงพลังสำหรับทุกคนที่ทำงานกับ JSON เป็นประจำ มันช่วยทั้งการกรอง แปลง คำนวณ และจัดรูปข้อมูลได้อย่างรวดเร็วบน command line โดยไม่ต้องพึ่งสคริปต์ยาวหรือเครื่องมือขนาดใหญ่ หากคุณใช้งาน API, log, cloud CLI หรือระบบที่ให้ output เป็น JSON อยู่แล้ว การฝึก jq คือการลงทุนที่คุ้มค่าอย่างมาก เพราะมันช่วยประหยัดเวลา เพิ่มความคล่องตัว และทำให้การทำงานบน terminal สนุกขึ้นอย่างชัดเจน
บางครั้งเครื่องมือที่เปลี่ยนวิธีทำงานของเราได้มากที่สุด ไม่ใช่ framework ใหม่ขนาดใหญ่ แต่เป็น utility เล็ก ๆ ที่ใช้งานได้ทุกวัน และ jq คือหนึ่งในเครื่องมือประเภทนั้นอย่างแท้จริง