Công cụ kiểm tra JSONPath

Chạy truy vấn JSONPath RFC 9535 trên JSON và xem mọi kết quả kèm đường dẫn.

Cú pháp RFC 9535, ví dụ $..book[[email protected] < 10].title

Ví dụ

2 kết quả khớp

  1. $['store']['book'][0]['title']
    "Sayings of the Century"
  2. $['store']['book'][2]['title']
    "Moby Dick"

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

Dán một tài liệu JSON, gõ truy vấn JSONPath, mọi kết quả khớp hiện ra ngay, mỗi kết quả kèm đường dẫn chuẩn hóa (như $['store']['book'][2]['title']) và giá trị. Bạn có thể sao chép mọi giá trị dưới dạng mảng JSON, hoặc mọi đường dẫn. Công cụ theo RFC 9535, chuẩn JSONPath do IETF công bố tháng 2 năm 2024. Lỗi cú pháp hiển thị số cột và dấu ^ dưới chỗ sai. Không có gì được tải lên, và truy vấn được chạy bằng bộ phân tích riêng, không thực thi mã.

Cú pháp tóm tắt

  • $ là gốc tài liệu; @ là phần tử hiện tại bên trong bộ lọc.
  • .name hoặc ['name'] chọn một thành viên; dùng ngoặc vuông cho tên có dấu cách hay ký hiệu.
  • [0], [-1] chọn phần tử mảng từ đầu hoặc cuối; [start:end:step] là lát cắt như Python.
  • * chọn mọi thành viên; .. tìm ở mọi độ sâu: $..price lấy mọi giá.
  • [?filter] giữ phần tử thỏa điều kiện: $..book[[email protected] < 10], $..book[[email protected]].

Hàm: length(), count(), match() (khớp toàn chuỗi), search() (tìm ở bất kỳ đâu), value().

Ví dụ trên mẫu cửa hàng sách

Mẫu chính là tài liệu trong RFC 9535. $..book[[email protected] < 10].title trả về "Sayings of the Century" và "Moby Dick"; $.store..price trả về 8.95, 12.99, 8.99, 22.99 rồi 399 (giá xe đạp sau cùng, vì hậu duệ được duyệt theo chiều sâu, đúng thứ tự tài liệu); $..* trả về 27 giá trị.

Những quy tắc gây bất ngờ

So sánh chỉ nhận một giá trị: @.* == 1 là lỗi. Hai vế cùng không tồn tại thì == cho true. Kiểu không tự đổi: 13 == '13' là false. match() neo cả chuỗi, search() thì không. Kết quả có thể lặp: $[0,0] trả về phần tử đầu hai lần. Bài viết JSONPath, jq hay bộ lọc JavaScript so sánh ba cách; để định dạng đầu vào, dùng công cụ định dạng JSON.

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

Công cụ theo phiên bản JSONPath nào?

RFC 9535, chuẩn IETF công bố tháng 2 năm 2024. Các phương ngữ cũ như Jayway (Java) hay jsonpath-plus nhận thêm một số cú pháp mà chuẩn đã bỏ.

Vì sao @.* == 1 bị báo lỗi?

Trong RFC 9535, phép so sánh chỉ nhận truy vấn trả về tối đa một giá trị (tên và chỉ số, không có *, lát cắt, bộ lọc hay ..).

Đường dẫn chuẩn hóa là gì?

Cách viết duy nhất cho vị trí của một giá trị: $ rồi ['tên'] cho mỗi thành viên và [n] cho mỗi chỉ số, như $['store']['book'][0].

JSON của tôi có bị gửi đi không?

Không. Việc phân tích và chạy truy vấn diễn ra trong trình duyệt.