Trình Trích Xuất JSON Path

Dán JSON và nhập một biểu thức đường dẫn như $.store.book[0].title để trích xuất các giá trị.

Kết quả

Nhập JSON và một đường dẫn, sau đó nhấp Trích xuất.

Cách thức hoạt động

  1. Dán JSON của bạn: nhập một đối tượng hoặc một mảng JSON vào trường nhập.
  2. Nhập một biểu thức JSONPath: gõ một đường dẫn như $.store.book[*].author hoặc $.users[?(@.age > 18)] để chọn các dữ liệu mong muốn.
  3. Hình dung các kết quả được trích xuất: các giá trị tương ứng xuất hiện ngay lập tức trong bảng đầu ra. Sao chép kết quả hoặc xuất nó.

Tại sao sử dụng bộ trích xuất JSONPath?

Khi bạn làm việc với các phản hồi API phức tạp hoặc JSON được lồng sâu, trích xuất các giá trị cụ thể bằng tay là chậm và dễ mắc lỗi. JSONPath là ngôn ngữ truy vấn cho JSON, tương tự như XPath cho XML. Nó cho phép nhắm chính xác các dữ liệu bạn cần với một biểu thức đường dẫn ngắn gọn, cho dù đó là một giá trị được lồng duy nhất, tất cả các phần tử của một mảng hay các bản ghi đã lọc tương ứng với một điều kiện. Công cụ này làm cho khám phá JSONPath trở nên tương tác mà không cần viết mã.

Tính năng

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

JSONPath là gì?

JSONPath là một ngôn ngữ truy vấn cho các tài liệu JSON, tương tự với XPath cho XML. Một đường dẫn như $.users[*].name chọn trường name của mỗi đối tượng trong mảng users. Nó được sử dụng rộng rãi cho kiểm tra API, biến đổi dữ liệu và xử lý JSON.

Cách lọc các phần tử của một mảng theo một điều kiện?

Sử dụng một biểu thức bộ lọc: $.items[?(@.price < 50)] trả về tất cả các phần tử có giá dưới 50. Ký hiệu @ chỉ phần tử đang được đánh giá.

Nó có hỗ trợ tìm kiếm đệ quy không?

Có. Toán tử .. thực hiện tìm kiếm đệ quy ở tất cả các cấp. Ví dụ, $..name tìm tất cả các khóa name ở bất kỳ đâu trong cấu trúc JSON, bất kể độ sâu lồng nhau.

Từ một bài blog đến RFC 9535: con đường 17 năm để có một tiêu chuẩn JSONPath

Stefan Gössner đã đề xuất JSONPath trong một bài blog duy nhất vào tháng 2 năm 2007, điều chỉnh ý tưởng XPath cho JSON. Ông đã xuất bản một triển khai JavaScript tham chiếu, phác thảo cú pháp (gốc $, các toán tử con dấu chấm và dấu ngoặc, .. cho việc xuống đệ quy, * cho ký tự đại diện, [bắt_đầu:kết_thúc:bước] cho cắt mảng, [?(...)] cho biểu thức lọc) và hệ sinh thái rộng lớn hơn đã theo. Các triển khai sinh sôi nảy nở: jsonpath cho JavaScript, JsonPath cho Java, jq (Stephen Dolan, 2012) gần với JSONPath nhưng là cái của riêng nó, jsonpath-ng cho Python, JMESPath (AWS, 2014) như một đối thủ nghiêm ngặt hơn. Vấn đề: mọi triển khai đều trôi dạt. Cú pháp bộ lọc, ngữ nghĩa đệ quy, khớp regex, định danh gốc, tất cả đều khác nhau một cách tinh tế giữa các thư viện. Một nghiên cứu so sánh năm 2023 của Carsten Bormann et al. đã kiểm tra 41 triển khai JSONPath riêng biệt với cùng một đầu vào và nhận được 41 bộ kết quả khác nhau cho cùng một biểu thức. Nhóm Công tác JSONPath của IETF đã tập hợp vào năm 2020 để khắc phục điều này. RFC 9535 «JSONPath: Query Expressions for JSON» được xuất bản vào tháng 2 năm 2024, trở thành tiêu chuẩn chính thức đầu tiên cho JSONPath, 17 năm sau bài đăng gốc của Gössner. RFC 9535 mã hóa cú pháp, định nghĩa một định dạng đầu ra chuẩn hóa, yêu cầu chuẩn hóa Unicode cho các so sánh chuỗi, và thêm một bộ kiểm tra tuân thủ.

Bảng tóm tắt cú pháp JSONPath

Bảy toán tử bao gồm hầu hết các truy vấn thế giới thực:

Nơi bạn thực sự với tay đến JSONPath

Những lỗi cắn

JSONPath vs jq vs JMESPath vs JSON Pointer

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

JSONPath có giống XPath không?

Được truyền cảm hứng bởi nó, không giống. XPath đã được W3C hoàn thiện năm 1999 cho XML, JSONPath đã được Gössner phác thảo năm 2007 để mang ý tưởng tương tự đến JSON. Sự khác biệt lớn nhất: JSONPath sử dụng .[] thay vì /, JSONPath không có khái niệm về không gian tên hoặc thuộc tính XML, JSONPath được chuẩn hóa sau nhiều năm (2024 vs 1999), nên trong nhiều năm nó là một cú pháp thực tế với nhiều triển khai không tương thích.

Tại sao cùng một JSONPath cho kết quả khác nhau trong các công cụ khác nhau?

Bởi vì JSONPath không được chuẩn hóa cho đến RFC 9535 (tháng 2 năm 2024). Trước đó, mỗi triển khai đưa ra lựa chọn riêng về cú pháp bộ lọc, hỗ trợ regex, định danh gốc, quy tắc thoát, và các trường hợp cạnh (mảng trống, khóa thiếu, ép kiểu trong bộ lọc). Một nghiên cứu của nhóm công tác IETF năm 2023 đã kiểm tra 41 triển khai trên cùng một đầu vào và nhận được 41 bộ kết quả khác nhau. RFC 9535 sửa chữa điều này cho các thư viện mới và được cập nhật; các thư viện cũ hơn sẽ phân kỳ cho đến khi chúng di chuyển. Luôn kiểm tra xem thư viện của bạn có tuyên bố «tuân thủ RFC 9535» không.

Tôi có thể sửa đổi JSON với JSONPath, hay chỉ đọc?

RFC 9535 định nghĩa JSONPath nghiêm ngặt là một ngôn ngữ truy vấn: nó trả về các giá trị từ một tài liệu, nó không biến đổi. Để sửa đổi JSON, sử dụng JSON Patch (RFC 6902), sử dụng các đường dẫn JSON Pointer và các hoạt động add/remove/replace/copy/move/test. Một số thư viện kết hợp cả hai (ví dụ: jsonpath-plus trong JavaScript có một phần mở rộng đột biến apply()) nhưng đó không phải JSONPath tiêu chuẩn.

JSONPath có hỗ trợ biểu thức chính quy trong bộ lọc không?

RFC 9535 đã thêm hai hàm regex: match(node, regex) khớp toàn bộ chuỗi, search(node, regex) khớp bất kỳ chuỗi con nào. Ví dụ: $.book[?(match(@.isbn, "^978-"))]. Hương vị regex là I-Regexp (RFC 9485, một hồ sơ của regex XML Schema), không phải PCRE hoặc regex JavaScript. Các thư viện cũ hơn sử dụng hương vị regex của ngôn ngữ chủ của họ, điều này làm cho các truy vấn regex đặc biệt không thể chuyển đổi được.

JSON của tôi có được gửi đi đâu khi tôi sử dụng công cụ này không?

Không. Đánh giá đường dẫn chạy hoàn toàn trong động cơ JavaScript của trình duyệt của bạn. Mở tab Mạng trong DevTools và chạy một truy vấn, bạn sẽ thấy không có yêu cầu đi ra trong khi đánh giá. An toàn cho các phản hồi API với các bí mật, các bãi rác cơ sở dữ liệu với PII, hoặc các tệp cấu hình chứa thông tin xác thực.

Công cụ liên quan

Trình Xem Cây JSON Công cụ Định Dạng & Xác Thực JSON Trực Tuyến Miễn Phí Trình Chuyển Đổi JSON Sang CSV So Sánh JSON