jq Online — Truy vấn JSON

Dán JSON, viết filter jq và chạy ngay trong trình duyệt. Chạy bằng engine jq thuần Rust (jaq) — dữ liệu của bạn không bao giờ rời khỏi máy.

File không bao giờ rời khỏi thiết bị của bạn
0
Ví dụ:

Công cụ này làm gì

Dán JSON vào, viết một filter jq, rồi chạy nó — hoàn toàn ngay trong trình duyệt của bạn. Một module WebAssembly được biên dịch từ jaq, một bản viết lại ngôn ngữ jq hoàn toàn bằng Rust, biên dịch và chạy filter của bạn ngay trên thiết bị của bạn. Không có gì được tải lên để làm việc này: JSON và filter của bạn không bao giờ rời khỏi tab trình duyệt.

Mẹo: Chưa quen với jq? Nhấp vào một trong các nút ví dụ phía trên ô filter — identity, truy cập trường, duyệt mảng, map, hoặc keys — để có ngay một filter chạy được, rồi chỉnh lại theo tên trường của dữ liệu bạn.

Cách sử dụng

Dán JSON của bạn vào ô nhập liệu, hoặc nạp từ một file. Gõ một filter jq vào ô filter — hoặc nhấp vào một trong các nút ví dụ để bắt đầu từ một filter đã chạy được — rồi nhấp Chạy. Mỗi giá trị filter của bạn tạo ra sẽ hiện thành một kết quả riêng bên dưới, theo đúng thứ tự filter trả về; sao chép một kết quả bất kỳ hoặc toàn bộ đầu ra khi bạn đã hài lòng.

Sổ tay công thức jq

Filter jq đọc từ trái sang phải, và ký tự pipe | nối đầu ra của filter này thành đầu vào của filter tiếp theo. Một vài mẫu quen thuộc đã đủ dùng cho phần lớn nhu cầu thường ngày:

.

Filter identity — trả về đầu vào y nguyên, không đổi gì cả. Hữu ích để kiểm tra JSON của bạn đã được parse đúng như mong đợi trước khi viết gì phức tạp hơn.

.foo

Truy cập trường — lấy giá trị của khóa foo ra khỏi một object. Nối thêm để đi sâu hơn, ví dụ .foo.bar.

.[] | .name

Duyệt mảng rồi truy cập trường — .[] phát ra lần lượt từng phần tử của một mảng (hoặc từng giá trị của một object), và pipe đưa mỗi phần tử đó vào .name, tạo ra một kết quả cho mỗi phần tử có khóa đó.

map(.x)

Dựng một mảng mới bằng cách áp dụng .x lên từng phần tử của mảng đầu vào — phiên bản giữ nguyên cấu trúc mảng của .[] | .x.

keys

Trả về một mảng chứa các khóa của một object, đã sắp theo thứ tự bảng chữ cái — tiện để xem nhanh cấu trúc của một tài liệu bạn chưa quen.

.[] | select(.age > 30)

Duyệt mảng rồi chỉ giữ lại những phần tử thỏa điều kiện — select cho một giá trị đi qua nguyên vẹn nếu điều kiện đúng và loại bỏ nếu sai, đây chính là cách bạn lọc một mảng object xuống còn những phần tử mình cần.

now

Thời gian hiện tại dạng Unix timestamp tính bằng giây, được tab trình duyệt của bạn cung cấp nên luôn khớp với đồng hồ máy bạn thay vì phụ thuộc vào một server.

Ngữ nghĩa số: jq dùng số thực 64-bit, giống bản gốc

Công cụ này xử lý số giống hệt jq CLI thật, và điều đó khác với công cụ Định dạng trên trang này. Một khi một con số đi qua filter jq, nó được biểu diễn dưới dạng số thực dấu phẩy động 64-bit — cùng cách JavaScript biểu diễn số — nên một số nguyên khổng lồ có thể trả về hơi khác so với lúc vào, đúng như jq bản gốc sẽ xử lý. Đó là hành vi bình thường của jq chứ không phải lỗi của công cụ này, và nó chỉ ảnh hưởng tới những số vượt khoảng mười bảy chữ số có nghĩa; các giá trị thường ngày không bị ảnh hưởng.

Nếu bạn cần giữ một con số đúng y như đã viết — chẳng hạn định dạng một tài liệu chứa một ID rất lớn hoặc một số thập phân dài mà không muốn động vào bất kỳ chữ số nào — hãy dùng công cụ Định dạng JSON thay vì công cụ này. Nó parse bằng Rust ở chế độ giữ nguyên phần chữ số gốc của từng con số, đó là lý do nó giữ chính xác từng byte, trong khi một công cụ truy vấn và biến đổi như công cụ này, do bản chất công việc, thì không.

Giới hạn

JSON đầu vào bị giới hạn ở mức 10 MB, và mỗi lần chạy bị giới hạn tối đa 10.000 giá trị đầu ra. Cả hai giới hạn đều dừng việc chạy ngay từ đầu kèm thông báo rõ ràng, thay vì để tab trình duyệt của bạn bị treo khi cố xử lý hoặc hiển thị nhiều hơn mức nó xử lý nổi.

Bước tiếp theo

Nếu điều bạn thực sự cần là dọn dẹp, kiểm tra hoặc nén một tài liệu JSON thay vì truy vấn hay biến đổi nó — nhất là một tài liệu chứa những con số rất lớn mà bạn không muốn bị thay đổi — công cụ Định dạng JSON làm đúng việc đó và giữ nguyên từng chữ số như bạn đã viết.

Câu hỏi thường gặp

Đây có phải là công cụ dòng lệnh jq thật không?
Công cụ này chạy jaq, một bản viết lại hoàn toàn ngôn ngữ jq bằng Rust, thay vì bản gốc viết bằng C. jaq hướng tới hỗ trợ cùng cú pháp filter và hành xử giống bản gốc cho các nhu cầu thường ngày — truy cập trường, pipe, các hàm dựng sẵn quen thuộc — nên những filter bạn đã biết thường chạy đúng như mong đợi ở đây, dù là một bản triển khai độc lập nên đôi khi có thể khác bản gốc ở vài chi tiết hiếm gặp của ngôn ngữ.
JSON của tôi có bị tải lên đâu để chạy truy vấn không?
Không. JSON và filter của bạn đều được đưa vào một module WebAssembly chạy ngay bên trong tab trình duyệt, và câu truy vấn thực thi hoàn toàn trên thiết bị của bạn. Không có gì được gửi tới server ở bất kỳ thời điểm nào.
Có giới hạn số lượng kết quả một truy vấn có thể trả về không?
Có — tối đa 10.000 giá trị đầu ra cho mỗi lần chạy. Một filter kiểu duyệt qua rồi lọc trên diện rộng mà tạo ra nhiều hơn số đó sẽ dừng lại kèm thông báo rõ ràng, yêu cầu bạn thu hẹp câu truy vấn, thay vì cố hiển thị một luồng kết quả không giới hạn trong tab trình duyệt của bạn.
Công cụ này khác công cụ Định dạng JSON ở điểm nào?
Công cụ định dạng có nhiệm vụ kiểm tra, trình bày đẹp, nén và sắp xếp lại một tài liệu JSON có sẵn mà không làm thay đổi ý nghĩa của nó, và nó cố gắng giữ nguyên từng chữ số của mọi con số đúng như đã viết. Công cụ này có nhiệm vụ khác: bạn viết một filter để chọn, biến đổi hoặc dựng lại JSON thành thứ gì đó mới. Một hệ quả của sự khác biệt đó nằm ở cách xử lý số — công cụ này tuân theo ngữ nghĩa số của jq thật, nên một số nguyên rất lớn có thể trả về hơi khác so với lúc vào, đúng như cách jq CLI chính thức xử lý, trong khi công cụ Định dạng không bao giờ động vào từng chữ số của một con số.