Chuyển đổi JSON bằng jq: Hướng dẫn tương tác
(navendu.me)jqlà công cụ dòng lệnh để xử lý dữ liệu JSON, được cài sẵn mặc định trên hầu hết các bản phân phối Linux- Hữu ích để in đẹp (pretty print) dữ liệu JSON hoặc biến đổi dữ liệu bằng bộ lọc
- Mạnh mẽ đến mức được xem là một trong 5 công cụ CLI mà lập trình viên nhất định nên học, và có thể đơn giản hóa nhiều tác vụ khác nhau khi làm việc với dữ liệu JSON
Cài đặt jq và cách dùng cơ bản
-
Cách cài đặt
- Có thể cài
jqbằng hầu hết các trình quản lý gói, hoặc tải trực tiếp binary hay build từ mã nguồn - Sau khi cài đặt, có thể dùng lệnh
jqđể kiểm tra hoạt động
- Có thể cài
-
Ví dụ sử dụng cơ bản
- In đẹp dữ liệu JSON:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq
- In đẹp dữ liệu JSON:
-
Ví dụ về bộ lọc JSON
- Lọc dữ liệu theo điều kiện cụ thể:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ '.[] | select(.address.city == "South Christy") | {name, username, email}'
- Lọc dữ liệu theo điều kiện cụ thể:
Các tính năng chính của jq
Bộ lọc cơ bản
-
Bộ lọc Identity
- Xuất dữ liệu đầu vào mà không thay đổi:
echo '{"id":1,"name":"Leanne Graham","website":"hildegard.org"}' | jq '.'
- Xuất dữ liệu đầu vào mà không thay đổi:
-
Truy cập trường cụ thể
- Chọn trường cụ thể trong đối tượng JSON:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq '.name' - Truy cập trường lồng nhau:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq '.address.zipcode'
- Chọn trường cụ thể trong đối tượng JSON:
Xử lý mảng
-
Truy cập phần tử mảng
- Chọn phần tử ở chỉ mục cụ thể trong mảng JSON:
curl 'https://jsonplaceholder.typicode.com/users' | jq '.[0]'
- Chọn phần tử ở chỉ mục cụ thể trong mảng JSON:
-
Cắt lát mảng
- Trích xuất mảng con trong một phạm vi nhất định:
curl 'https://jsonplaceholder.typicode.com/users' | jq '.[3:6]'
- Trích xuất mảng con trong một phạm vi nhất định:
-
Lặp qua mảng
- Áp dụng bộ lọc cho từng phần tử trong mảng:
curl 'https://jsonplaceholder.typicode.com/users' | jq '.[] | {name, email}'
- Áp dụng bộ lọc cho từng phần tử trong mảng:
Tạo JSON mới
-
Tạo đối tượng mới
- Tạo đối tượng JSON mới từ các trường đã chọn:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq \ '{"name": .name, "email": .email, "company": .company.name}'
- Tạo đối tượng JSON mới từ các trường đã chọn:
-
Tạo mảng mới
- Tạo mảng từ dữ liệu đã được biến đổi:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ '[.[] | {name: .name, email: .email, company: .company.name}]'
- Tạo mảng từ dữ liệu đã được biến đổi:
Tính năng nâng cao của jq
Sử dụng hàm
-
Tính độ dài
- Tính độ dài chuỗi:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq '.name | length'
- Tính độ dài chuỗi:
-
Trích xuất khóa
- Trả về các khóa của đối tượng dưới dạng mảng:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq 'keys'
- Trả về các khóa của đối tượng dưới dạng mảng:
-
Hàm map
- Áp dụng bộ lọc cho từng phần tử của mảng:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ 'map({name: .name, city: .address.city})'
- Áp dụng bộ lọc cho từng phần tử của mảng:
Chọn dữ liệu
- Chọn dữ liệu theo điều kiện
- Lọc dữ liệu thỏa điều kiện cụ thể:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ '.[] | select(.address.city == "South Christy")'
- Lọc dữ liệu thỏa điều kiện cụ thể:
Biến đổi và ứng dụng JSON
-
Biến đổi JSON nâng cao
- Bộ lọc để nhóm dữ liệu hoặc tính toán thống kê:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ 'group_by(.address.city) | map({ city: .[0].address.city, user_count: length, users: [.[] | {name: .name, username: .username}] })'
- Bộ lọc để nhóm dữ liệu hoặc tính toán thống kê:
-
Xử lý JSON quy mô lớn
- Xử lý hiệu quả khối lượng lớn dữ liệu JSON:
curl 'https://api.github.com/repos/apache/apisix/contributors?per_page=100' | jq \ 'sort_by(.contributions) | reverse | map({username: .login, contributions}) | .[0:5]'
- Xử lý hiệu quả khối lượng lớn dữ liệu JSON:
-
Có thể thực hành tại jq Playground
3 bình luận
Cảm ơn bản tóm tắt! Đúng là thông tin cực kỳ hữu ích.
> Mạnh đến mức được xếp vào 5 công cụ CLI mà các lập trình viên nhất định phải học,
Nhưng tôi cũng tò mò 4 công cụ CLI còn lại là gì, mà bài viết lại không nhắc tới nên thành ra giống một MacGuffin mất rồi..
https://navendu.me/posts/jq-interactive-guide/….
Đọc bản gốc thì thấy
> jq is on every “five command line tools to learn as a developer” video on YouTube.
có câu như vậy.
Bốn công cụ còn lại thì không được nêu cụ thể, chắc là
jqlúc nào cũng được nhắc tới trong mấy video kiểu đề xuất CLI tool như thế này thôi haha