Công cụ kiểm thử JSONPath

Hãy dán một tài liệu JSON và nhập một biểu thức JSONPath như $..book[?(@.price<10)]. Bộ kiểm thử sẽ đánh giá biểu thức này trên tài liệu và hiển thị tất cả các giá trị phù hợp cùng đường dẫn chính xác của từng kết quả khớp. Phương pháp này rất hữu ích để xác thực truy vấn bạn sắp dán vào kịch bản hoặc tài liệu mô tả API (Postman, k6 và JMeter đều hỗ trợ JSONPath).

Cách kiểm thử biểu thức JSONPath

  1. 1

    Dán tài liệu JSON

    Bất kỳ đối tượng JSON hợp lệ nào, bao gồm đối tượng, mảng hoặc cấu trúc được nhúng sâu.

  2. 2

    Nhập biểu thức

    Bắt đầu bằng `$` cho gốc; sử dụng `.` cho con, `..` cho việc truyền ngược theo cấu trúc lồng ghép, và `[*]` cho ký tự thay thế (wildcard).

  3. 3

    Xem các kết quả khớp theo thời gian thực

    Mỗi kết quả khớp đều được hiển thị kèm giá trị và đường dẫn JSONPath đầy đủ, được đánh dấu nổi bật trong tài liệu gốc.

  4. 4

    Sao chép kết quả

    Sao chép các kết quả khớp dưới dạng mảng JSON, hoặc sao chép từng đường dẫn riêng biệt để sử dụng trong mã phía sau.

Tài liệu tham khảo cú pháp JSONPath

Biểu thức Ý nghĩa
$ Phần tử gốc
$.store Con của $, tên là store
$["store"] Tương tự, dạng ngoặc vuông
$..author Tất cả các thuộc tính của author ở mọi độ sâu
$.store.book[*] Mọi cuốn sách trong cửa hàng
$.store.book[0] Cuốn sách đầu tiên
$.store.book[-1:] Cuốn sách cuối cùng
$.store.book[0:2] Hai cuốn sách đầu tiên (phần cắt)
$.store.book[?(@.isbn)] Các cuốn sách có thuộc tính isbn
$.store.book[?(@.price < 10)] Sách giá dưới 10
$.store.book[?(@.category == "fiction")] Sách hư cấu
$..* Mọi giá trị, ở mọi nơi

Các biểu thức lọc

Các biểu thức lọc sử dụng @ để tham chiếu đến nút hiện tại. Thiết bị kiểm thử hỗ trợ các toán tử phổ biến là ==, !=, <, >, <=, >=, &&, || và biểu thức chính tắc regex =~.

$.items[?(@.qty >= 10 && @.price < 50)]

Các phương ngữ của JSONPath

Có nhiều cách triển khai JSONPath với một số sự không tương thích nhỏ. Bộ kiểm thử này tuân thủ tập đặc tả gốc của Goessner và các cải tiến trong RFC 9535, và tương thích với:

  • JaywayJsonPath (Java)
  • jsonpath-plus (JavaScript)
  • jsonpath-rw (Python)
  • Các biểu thức đường dẫn cơ bản của jq

Các tính năng không tương thích (như biểu thức script kết hợp với JS tùy ý) sẽ được đánh dấu trong bảng lỗi.

Khi JSONPath vượt trội hơn một bộ phân tích toàn diện

  • Các khẳng định kiểm thử: Công cụ pm.expect(jsonData).to.have.jsonPath(...) của Postman nhận một đường dẫn.
  • Trích xuất cấu hình: trích xuất một giá trị từ phản hồi API lớn mà không cần sử dụng thư viện nào.
  • Các kịch bản kiểm thử tải: K6, JMeter và Gatling đều hỗ trợ JSONPath để thực hiện các kiểm tra.
  • Kubernetes / AWS CLI: Các tùy chọn --query--jsonpath cho phép bạn định hình kết quả đầu ra từ dòng lệnh.

Các lỗi phổ biến

  • Sử dụng . trên một mảng. $.users.0.name là không chính xác; hãy sử dụng $.users[0].name.
  • Bỏ quên .. khi xác định độ sâu. Các đường dẫn như $.name chỉ khớp với name ở cấp cao nhất; hãy sử dụng $..name cho tất cả các trường hợp.
  • Nhầm lẫn JSONPath với jq. jq là một tập hợp rộng hơn bao gồm các cơ chế kiểm soát luồng và chuyển đổi dữ liệu; trong khi đó, JSONPath chỉ dùng riêng cho việc trích xuất dữ liệu.
  • Neo bằng Regex. =~ /foo/ khớp với các chuỗi con; sử dụng /^foo$/ để khớp chính xác.

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

JSONPath là một ngôn ngữ trích xuất thuần túy – hỗ trợ chọn, lọc và cắt dữ liệu. jq là ngôn ngữ truy vấn và biến đổi đầy đủ, với cơ chế luồng điều khiển, biến và hàm. Đối với việc trích xuất đơn giản, JSONPath mang tính di động cao hơn; còn đối với các phép biến đổi, hãy sử dụng jq.

Bản đặc tả gốc của Goessner kết hợp với các cải tiến từ RFC 9535, tương thích với JaywayJsonPath (Java) và jsonpath-plus (Node). Các mở rộng riêng biệt cho từng phương ngữ (các biểu thức script chứa mã tùy ý) không được hỗ trợ.

Đúng vậy. $..book[?(@.title =~ /^Harry.*/)] phù hợp với tất cả các cuốn sách có tiêu đề bắt đầu bằng “Harry”. Để sử dụng chức năng khớp trọn vẹn, hãy dùng ^$.

Đúng vậy. Cả JSON và công cụ đánh giá JSONPath đều được lưu trữ trong trình duyệt của bạn; tài liệu và các truy vấn của bạn sẽ không bao giờ rời khỏi tab đó.

Công cụ liên quan

Công cụ này có phiên bản bằng các ngôn ngữ khác