- JSON Path là một ngôn ngữ truy vấn có thể dùng để trích xuất dữ liệu từ tài liệu JSON
- Vì OpenAPI là tài liệu JSON hoặc YAML, nên có thể dùng JSON Path để thực hiện nhiều tác vụ khác nhau trên OpenAPI
- Vá thêm nội dung, ví dụ mã và nhiều thứ khác vào tài liệu bằng OpenAPI Overlay
- Có thể dùng trong Spectral để viết các quy tắc nâng cao
- Cũng có thể dùng trong AWS Step Functions
- Cách JSON Path hoạt động
- Duyệt qua và lọc cấu trúc dữ liệu JSON, rồi trích xuất các phần cụ thể
- Cú pháp tương tự XPath (dùng trong XML)
- Ví dụ cú pháp:
$.store.book[?@.price < 10].title
- Ứng dụng trong OpenAPI
- Có thể dùng lệnh
jpp để truy vấn tài liệu OpenAPI và trích xuất các phần cụ thể
- Dùng Overlay để chỉnh sửa hoặc bổ sung thông tin cho tài liệu OpenAPI
- Cập nhật mô tả, thêm thông tin liên hệ, v.v.
- Loại bỏ máy chủ phát triển/staging khỏi danh sách máy chủ và chỉ giữ lại production
- Thêm thông tin về máy chủ sandbox mới, v.v.
- Tìm hiểu thêm về JSON Path
- Được IETF ban hành thành tiêu chuẩn vào năm 2024 (RFC 9535)
- Trước đây tồn tại nhiều biến thể khác nhau, nhưng đang có xu hướng thống nhất nhờ chuẩn hóa
- Nên tuân theo cú pháp RFC 9535
Ý kiến của GN⁺
- JSON Path đang được sử dụng ở ngày càng nhiều nơi nên là một kỹ năng hữu ích để biết. Đặc biệt, nó có vẻ sẽ trở thành kỹ năng thiết yếu đối với các nhà phát triển hoặc technical writer làm việc với OpenAPI.
- Cú pháp của JSON Path vẫn chưa hoàn toàn thống nhất nên có đôi chút gây nhầm lẫn, nhưng có vẻ nên lấy RFC 9535 làm chuẩn tham chiếu. Có thể kỳ vọng các công cụ liên quan sau này cũng sẽ tuân theo tiêu chuẩn này.
- Có vẻ có nhiều lĩnh vực có thể ứng dụng trong quá trình phát triển như OpenAPI Overlay hay Spectral. Không chỉ trích xuất dữ liệu đơn thuần mà còn có tiềm năng dùng cho việc bổ sung tài liệu, kiểm chứng và tinh chỉnh.
- Tuy vậy, cú pháp hơi phức tạp và cần quen với JSON/YAML nên có một rào cản tiếp cận nhất định. Nên bắt đầu theo cách đơn giản rồi dần học các tính năng nâng cao.
- Có vẻ sẽ rất phù hợp để luyện tập với các công cụ dòng lệnh như jq hoặc yq. Việc dùng các công cụ tích hợp như Bump.sh cũng sẽ giúp ích cho năng suất.
2 bình luận
Cảm ơn bạn
Ý kiến trên Hacker News
JSONata(https://jsonata.org) là một trong những công cụ tốt nhất để thao tác với JSON, dùng cú pháp JsonPath và ngoài việc chọn node còn cung cấp các hàm trợ giúp cho số học, so sánh, sắp xếp, gom nhóm, xử lý ngày tháng, tổng hợp, v.v. Được viết bằng JS nên có thể dùng trên Node hoặc trình duyệt, và cũng có wrapper Python (https://pypi.org/project/pyjsonata/).
json_profile(https://github.com/tylerneylon/json_profile) là công cụ giúp nhanh chóng hiểu schema chính và vị trí dữ liệu của một tệp JSON mới, hữu ích khi các phần tử ngang hàng trong danh sách có cùng cấu trúc. Công cụ này học cấu trúc tệp, in ra các đường dẫn tổng hợp nặng nhất và cung cấp gợi ý kích thước theo từng đường dẫn.
espath(https://github.com/tomhodgins/espath) là thư viện dùng XPath và bộ chọn CSS để lọc và tìm dữ liệu trong JSON. Nó hoạt động bằng cách chuyển đối tượng JavaScript thành XML DOM, chạy truy vấn rồi chuyển lại thành đối tượng, hoặc bằng cách giữ registry của đối tượng gốc và truy xuất đối tượng gốc.
Có câu hỏi về việc liệu có một tên gọi chung cho cấu trúc dữ liệu mà JSON biểu diễn hay không, cùng với nhận xét về sự cần thiết của một ngôn ngữ đường dẫn hoạt động trên các cấu trúc tương tự như JSON, YAML, dictionary Python, TOML, v.v.
SQLite bao gồm một tập con của JSON Path trong cơ sở dữ liệu lõi, được dùng trong các hàm như json_extract(). Ghi chú chi tiết liên quan: https://til.simonwillison.net/sqlite/json-extract-path
Insomnia và Bruno có tính năng dùng JSON Path để lọc phản hồi.
Đã từng dùng hỗ trợ jsonpath của PostgreSQL để tạo các quy tắc lọc tùy chỉnh cho các hàng trong DB.
Người ta dự đoán các cuộc tấn công chèn JSON path sẽ là điều không thể tránh khỏi, giống như XPATH injection từng được sử dụng rộng rãi. (xem https://owasp.org/www-community/attacks/XPATH_Injection)
Thật lạ khi không có nhắc đến các công cụ tương tự như jq.
Thật tiếc là có quá nhiều cú pháp đường dẫn JSON. jq, JSON path, AWS CLI, MySQL, v.v. đều dùng cú pháp khác nhau nên rất khó hình thành trí nhớ cơ bắp.