Tất cả bài viết

JSONPath: truy vấn dữ liệu JSON mà không cần phân tích thủ công

JSONPath là một ngôn ngữ truy vấn để lấy giá trị từ tài liệu JSON theo đường dẫn — cùng vai trò mà XPath đảm nhiệm cho XML. Với những ai từng làm việc với hệ thống nhà nước hay ngân hàng ở Việt Nam vốn có tích hợp cũ dựa trên XML/SOAP, cú pháp này sẽ khá quen thuộc.

Cú pháp cơ bản

Một biểu thức luôn bắt đầu bằng $, gốc của tài liệu. Từ đó, các trường được truy cập bằng dấu chấm ($.user.name) hoặc ngoặc vuông ($['user']['name']), còn phần tử mảng được truy cập bằng chỉ số ($.items[0]).

Chọn nhiều giá trị cùng lúc

Ký tự đại diện * chọn tất cả phần tử ở một cấp, trong khi .. là phép duyệt đệ quy — tìm một trường ở bất kỳ độ sâu nào mà không cần biết đường dẫn chính xác. Bộ lọc như [?(@.price < 10)] chọn phần tử mảng theo một điều kiện giống biểu thức lập trình.

Dùng để làm gì

  • Trích nhanh một trường từ phản hồi API lớn khi debug, mà không cần viết script.
  • Lọc log hoặc sự kiện dạng JSON theo điều kiện ngay tại chỗ.
  • Đọc giá trị từ file cấu hình mà không cần tự viết trình phân tích cú pháp.

JSONPath so với XPath: lỗi lệch chỉ số kinh điển

Người từng dùng XPath, nơi chỉ số node bắt đầu từ 1 (book[1] là phần tử đầu tiên), thường mắc lỗi khi chuyển sang JSONPath, nơi chỉ số bắt đầu từ 0 — book[1] đã là phần tử thứ hai. Riêng khác biệt này gây ra không ít lỗi khi chuyển các tích hợp XML/XPath cũ sang API JSON.

Khóa chứa dấu chấm hoặc khoảng trắng

Nếu tên trường tự nó chứa dấu chấm, gạch nối hoặc khoảng trắng (ví dụ một khóa nguyên văn "user.name" thay vì các trường lồng nhau), ký hiệu chấm $.user.name sẽ trở nên mơ hồ — trình phân tích sẽ đọc nó thành hai trường lồng nhau username. Trong trường hợp này, khóa phải được đặt trong ngoặc vuông kèm dấu ngoặc kép: $['user.name'].

Dùng thử công cụ