Skip to content

Công thức jq được giải thích

Các bộ lọc jq dùng hằng ngày, nhóm theo việc cần làm: truy cập một giá trị, lọc và chọn, thao tác với tập hợp, biến đổi giá trị và chuỗi, định hình lại thành đối tượng hoặc mảng mới, cập nhật đường dẫn tại chỗ, rẽ nhánh theo logic, xử lý reduce nâng cao, cùng các cờ dòng lệnh định hình đầu vào và đầu ra. Mỗi hàng ghép bộ lọc với kết quả mà nó tạo ra.

jq là một bộ lọc: nó đọc JSON từ stdin, chạy một chuỗi biểu thức cách nhau bởi dấu pipe, và ghi JSON ra stdout. Dấu chấm là giá trị hiện tại; mọi thứ đều xây trên nó. Cách học nhanh nhất là đưa dữ liệu thật qua các công thức bên dưới và quan sát đầu ra. Chạy theo dạng jq 'bộ-lọc' file.json hoặc curl ... | jq 'bộ-lọc'.

Bảng tham chiếu · 65 mục
65 of 65 rows
Truy cập
Toàn bộ đầu vào, in định dạng đẹp.
Giá trị tại một khóa, hoặc các khóa lồng nhau.
Giá trị tại một khóa có tên chứa ký tự đặc biệt.
Phần tử đầu tiên của mảng (số âm đếm từ cuối).
Từng phần tử của mảng, hoặc từng giá trị của đối tượng, mỗi cái một dòng.
Giá trị tại khóa, hoặc null, không báo lỗi khi khóa thiếu.
Lọc và chọn
Đầu vào giữ nguyên khi điều kiện đúng, ngược lại không có gì.
Áp dụng biểu thức cho từng phần tử của mảng và gom kết quả lại.
Tên khóa đã sắp xếp, hoặc các giá trị, của một đối tượng dạng mảng.
Độ dài của mảng hoặc chuỗi, hoặc số khóa trong đối tượng.
Chỉ những phần tử có age lớn hơn 18, gom thành một mảng.
Tập hợp
Đúng khi ít nhất một phần tử, hoặc khi tất cả phần tử, là truthy hoặc vượt qua bộ lọc.
Đúng khi khóa k tồn tại trong đối tượng; in chạy cùng phép thử đó từ phía khóa.
Phần tử đầu tiên, phần tử cuối, hoặc chỉ n kết quả đầu của f.
Giá trị nhỏ nhất, hoặc lớn nhất, trong mảng.
Các số từ 0 đến n, mỗi số một kết quả riêng.
Mảng lồng nhau bị ép thành một mảng phẳng duy nhất.
Đúng khi x xuất hiện ở đâu đó trong đầu vào; inside đảo vai trò.
Áp dụng f cho từng giá trị từ dưới lên, rồi dựng lại toàn bộ đầu vào.
Biến đổi
Một mảng chỉ chứa trường price từ từng phần tử.
Tổng của một mảng số, hoặc sự hợp nhất của một mảng đối tượng.
Ép một giá trị thành chuỗi, hoặc một chuỗi số thành số.
Mã hóa đầu vào thành chuỗi JSON hoặc base64.
Chuỗi được chuyển thành chữ thường.
Chuỗi
Một chuỗi có giá trị của biểu thức được chèn vào văn bản.
Thay mọi chỗ khớp mẫu, hoặc chỉ chỗ đầu tiên, bằng s.
Tách chuỗi thành mảng theo dấu phân cách, hoặc dán mảng thành một chuỗi.
Kiểm tra chuỗi với một mẫu, hoặc trích các chỗ khớp và nhóm bắt có tên.
Cắt tiền tố, hoặc hậu tố, chỉ khi nó có mặt.
Đúng hoặc sai: chuỗi bắt đầu, hoặc kết thúc, bằng s.
Chuỗi được chuyển thành chữ hoa.
Một mảng được mã hóa thành dòng CSV, dòng TSV, hoặc đối số shell có nháy.
Định hình lại
Một đối tượng mới chỉ chứa các trường id và name của đầu vào.
Một mảng tên của mọi item.
Một mảng các đối tượng {key, value} lấy từ một đối tượng.
Một đối tượng dựng từ mảng các đối tượng {key, value}.
Các phần tử được nhóm thành mảng con theo trường cat.
Sắp xếp theo một trường, hoặc giữ một phần tử cho mỗi id khác biệt.
Cập nhật và đường dẫn
Cập nhật giá trị tại khóa bằng cách chạy f trên nó.
Ghi đè giá trị tại khóa bằng v.
Cộng n vào giá trị tại count, ngay tại chỗ.
Đọc, ghi, hoặc xóa giá trị tại các đường dẫn cho dưới dạng mảng.
Điều khiển và logic
a khi c đúng, ngược lại b; dùng elif cho nhiều nhánh hơn.
Chạy f, và chạy g với thông báo lỗi thay thế khi f thất bại.
Dừng với một lỗi mang theo msg, trừ khi một try bắt được nó.
Hoàn toàn không có đầu ra; nhánh đó cứ thế biến mất khỏi kết quả.
Kết hợp các giá trị đúng và sai, hoặc đảo một giá trị.
Nâng cao
Gộp toàn bộ mảng thành một tổng tích lũy.
Giống reduce, nhưng phát trạng thái sau mỗi bước, chứ không chỉ bước cuối.
Đầu vào kế tiếp, hoặc mọi đầu vào còn lại, được kéo vào giữa chừng bộ lọc.
Một giá trị dạng văn bản JSON, hoặc văn bản JSON được phân tích ngược thành giá trị.
Văn bản base64 được giải mã về chuỗi gốc.
Gán giá trị sâu trong cấu trúc, tự tạo các cấp còn thiếu trên đường đi.
a nếu nó không phải null hay false, nếu không thì b (giá trị mặc định).
Đầu vào với một khóa bị loại bỏ.
Mọi đường dẫn trong đầu vào dạng mảng các khóa, từ trên xuống.
Biến và CLI
Định nghĩa $name là một chuỗi shell, dùng được bên trong bộ lọc.
Định nghĩa $name từ JSON thô, dành cho số, boolean, mảng, hoặc đối tượng.
Định nghĩa $name là toàn bộ nội dung của một tệp JSON.
In kết quả chuỗi dạng thô, không nháy và không ký tự thoát.
In mỗi kết quả gọn trên một dòng, không thụt lề.
Chạy bộ lọc một lần trên null, để dựng đầu ra từ con số không.
Đọc toàn bộ đầu vào vào một mảng trước khi bộ lọc chạy.
Đặt mã thoát từ kết quả cuối cùng, để script shell kiểm tra được kết quả.
Giá trị của một biến môi trường, đọc bên trong bộ lọc.