Giới Thiệu
jq
là một công cụ dòng lệnh mạnh mẽ giúp xử lý, truy vấn và biến đổi dữ liệu JSON nhanh chóng. Đối với DevOps Engineer, việc làm việc với JSON là không thể tránh khỏi, đặc biệt khi xử lý log, API response, và cấu hình hệ thống. Trong bài viết này, chúng ta sẽ đi từ những thao tác cơ bản đến nâng cao với jq
, giúp bạn làm chủ công cụ này một cách hiệu quả.
1. Cài Đặt jq
Tùy vào hệ điều hành, bạn có thể cài đặt jq
theo các cách sau:
Trên Ubuntu/Debian
sudo apt update
sudo apt install jq
Trên macOS (Homebrew)
brew install jq
Trên Windows
- Cài đặt thông qua Chocolatey:
choco install jq
- Hoặc tải file
.exe
từ trang chủ stedolan.github.io/jq.
Sau khi cài đặt, bạn có thể kiểm tra phiên bản jq
:
jq --version
2. Cách Sử Dụng jq
Cơ Bản
2.1. Đọc và Định Dạng JSON
Giả sử bạn có một file JSON data.json
:
{
"name": "Alice",
"age": 25,
"city": "Hanoi"
}
Sử dụng jq
để hiển thị JSON theo định dạng dễ đọc:
cat data.json | jq .
2.2. Lấy Giá Trị Của Một Trường
jq '.name' data.json
Kết quả:
"Alice"
2.3. Lọc Dữ Liệu JSON Trong Mảng
Giả sử bạn có danh sách:
[
{ "name": "Alice", "age": 25 },
{ "name": "Bob", "age": 30 },
{ "name": "Charlie", "age": 28 }
]
Lấy tên tất cả user:
jq '.[].name' users.json
Lọc user trên 25 tuổi:
jq '.[] | select(.age > 25)' users.json
3. Sử Dụng jq
Nâng Cao
3.1. Truy Vấn JSON Lồng Nhau
Lấy tên từ danh sách JSON lồng nhau:
{
"users": [
{ "name": "Alice", "info": { "age": 25, "city": "Hanoi" } },
{ "name": "Bob", "info": { "age": 30, "city": "Saigon" } }
]
}
Truy vấn tên và thành phố:
jq '.users[] | {name: .name, city: .info.city}' data.json
3.2. Kết Hợp jq
Với curl
Lấy danh sách post từ JSONPlaceholder:
curl -s https://jsonplaceholder.typicode.com/posts | jq '.[0]'
3.3. Chuyển JSON Thành Chuỗi
jq -c . data.json
3.4. Thay Đổi Giá Trị Trong JSON
Giả sử bạn muốn thay đổi thành phố của Alice thành “Da Nang”:
jq '(.users[] | select(.name == "Alice")).info.city |= "Da Nang"' data.json
3.5. Trích Xuất Nhiều Giá Trị Một Lúc
Lấy cả tên và tuổi của tất cả user:
jq '.[] | {name, age}' users.json
4. Ứng Dụng jq
Trong DevOps
4.1. Phân Tích Log JSON
Nhiều hệ thống log như ELK (Elasticsearch, Logstash, Kibana) hoặc AWS CloudWatch Logs xuất dữ liệu dưới dạng JSON. Bạn có thể dùng jq
để trích xuất lỗi từ log:
cat logs.json | jq '.logs[] | select(.level == "error")'
4.2. Làm Việc Với API REST
Lấy danh sách user từ API và trích xuất tên:
curl -s https://jsonplaceholder.typicode.com/users | jq '.[].name'
4.3. Kết Hợp jq
Với Bash Script
Tạo script tự động trích xuất thông tin từ API:
#!/bin/bash
USERS=$(curl -s https://jsonplaceholder.typicode.com/users | jq -r '.[].name')
echo "Danh sách người dùng:"
echo "$USERS"
Lưu script và chạy:
chmod +x get_users.sh
./get_users.sh
4.4. Kết Hợp jq
Trong Pipeline CI/CD
Trong GitHub Actions hoặc GitLab CI/CD, jq
có thể được sử dụng để xử lý output JSON của các lệnh API:
jobs:
check-deployment:
runs-on: ubuntu-latest
steps:
- name: Kiểm tra trạng thái deployment
run: |
RESPONSE=$(curl -s http://api.example.com/deployment/status)
STATUS=$(echo "$RESPONSE" | jq -r '.status')
if [ "$STATUS" != "success" ]; then
echo "Deployment failed!"
exit 1
fi
4.5. Tối Ưu Truy Vấn JSON Với jq
- Sử dụng
map()
để xử lý từng phần tử trong mảng thay vì.|
:
jq 'map(select(.age > 25))' users.json
- Dùng
|=
để cập nhật giá trị mà không cần tạo bản sao:
jq '.users |= map(if .name == "Alice" then .city = "Da Nang" else . end)' data.json
5. Kết Luận
Với jq
, bạn có thể xử lý dữ liệu JSON nhanh chóng và hiệu quả, từ các thao tác cơ bản đến nâng cao. Công cụ này đặc biệt hữu ích trong DevOps khi làm việc với log, API, và cấu hình hệ thống.
Nếu bạn muốn tìm hiểu sâu hơn, hãy đọc tài liệu chính thức tại stedolan.github.io/jq.
Hãy thử áp dụng jq
vào công việc thực tế của bạn và chia sẻ trải nghiệm nha