Bạn đã bao giờ cảm thấy mình đang đào sâu vào một phản hồi JSON khổng lồ, cố gắng tìm kiếm một mảnh dữ liệu mà bạn cần? Nếu có, thì bạn biết rằng điều này có thể giống như việc tìm một chiếc kim trong đống rơm. Giới thiệu JSONPath - một công cụ nhỏ tuyệt vời có thể làm cho cuộc sống của bạn dễ dàng hơn rất nhiều khi xử lý dữ liệu JSON trong API.
JSONPath là gì?
JSONPath là một ngôn ngữ truy vấn cho JSON, tương tự như XPath cho XML. Nó cho phép bạn điều hướng và trích xuất các phần cụ thể của dữ liệu JSON của bạn bằng cách sử dụng cú pháp đơn giản, trực quan. Hãy coi nó như một cách để thực hiện các truy vấn trên dữ liệu JSON của bạn và nhận chính xác những gì bạn cần mà không phải lội qua toàn bộ phản hồi.
Tại sao nên sử dụng JSONPath?
Hãy tưởng tượng bạn có một phản hồi JSON khổng lồ từ một API; tất cả những gì bạn cần là giá trị của một trường cụ thể nằm sâu bên trong. Nếu không có JSONPath, bạn thường phải viết một đống mã để phân tích dữ liệu JSON, điều này có thể rất mệt mỏi và dễ mắc lỗi. JSONPath đơn giản hóa điều này bằng cách cho phép bạn chỉ định chính xác những gì bạn muốn trích xuất, làm cho mã của bạn gọn gàng hơn và dễ bảo trì hơn.
JSONPath hoạt động như thế nào?
JSONPath sử dụng một cú pháp tương tự như quy ước đối tượng JavaScript, với một số tính năng bổ sung cho các truy vấn phức tạp hơn. Dưới đây là tổng quan nhanh về cú pháp cơ bản:
$
: Đại diện cho đối tượng hoặc mảng gốc..
hoặc[]
: Toán tử con; được sử dụng để truy cập một thuộc tính của đối tượng hoặc một phần tử của mảng.*
: Ký tự đại diện; khớp với tất cả các phần tử hoặc trường...
: Tìm kiếm đệ quy; tìm kiếm các nút khớp tại bất kỳ cấp độ nào.?()
: Áp dụng một bộ lọc (biểu thức phải đánh giá thành true).()
: Biểu thức kịch bản, sử dụng động cơ kịch bản cơ sở.
Hãy cùng khám phá một số ví dụ để xem JSONPath hoạt động.
Ví dụ cơ bản về JSONPath
Xem xét dữ liệu JSON sau từ một API cơ sở dữ liệu phim:
{
"movies": {
"action": [
{ "title": "Mad Max: Fury Road", "director": "George Miller", "year": 2015, "rating": 8.1 },
{ "title": "John Wick", "director": "Chad Stahelski", "year": 2014, "rating": 7.4 }
],
"drama": [
{ "title": "The Shawshank Redemption", "director": "Frank Darabont", "year": 1994, "rating": 9.3 },
{ "title": "Forrest Gump", "director": "Robert Zemeckis", "year": 1994, "rating": 8.8 }
],
"comedy": [
{ "title": "The Grand Budapest Hotel", "director": "Wes Anderson", "year": 2014, "rating": 8.1 }
]
}
}
Trích xuất tất cả phim hành động:
$.movies.action[*]
Điều này sẽ cho bạn một mảng của tất cả các đối tượng phim hành động.
Trích xuất tiêu đề của tất cả phim chính kịch:
$.movies.drama[*].title
Điều này sẽ trả về một mảng các tiêu đề của tất cả phim chính kịch: ["The Shawshank Redemption", "Forrest Gump"]
.
Trích xuất điểm số của "Mad Max: Fury Road":
$.movies.action[?(@.title == "Mad Max: Fury Road")].rating
Điều này sẽ trả về điểm số của "Mad Max: Fury Road": 8.1
.
Tìm tất cả phim phát hành năm 2014:
$.movies..[?(@.year == 2014)]
Điều này sẽ trả về tất cả phim phát hành năm 2014, trong trường hợp này là: ["John Wick", "The Grand Budapest Hotel"]
.
JSONPath trong API
Sử dụng JSONPath trong API cực kỳ hữu ích khi bạn muốn trích xuất thông tin cụ thể từ một phản hồi JSON. Nhiều ngôn ngữ lập trình và công cụ có các thư viện hỗ trợ JSONPath, giúp dễ dàng tích hợp vào các dự án của bạn.
Ví dụ, trong Javascript, bạn có thể sử dụng thư viện jsonpath
:
const jsonpath = require('jsonpath');
// Dữ liệu JSON mẫu
const data = {
movies: {
action: [
{ title: "Mad Max: Fury Road", director: "George Miller", year: 2015, rating: 8.1 },
{ title: "John Wick", director: "Chad Stahelski", year: 2014, rating: 7.4 }
],
drama: [
{ title: "The Shawshank Redemption", director: "Frank Darabont", year: 1994, rating: 9.3 },
{ title: "Forrest Gump", director: "Robert Zemeckis", year: 1994, rating: 8.8 }
],
comedy: [
{ title: "The Grand Budapest Hotel", director: "Wes Anderson", year: 2014, rating: 8.1 }
]
}
};
// Trích xuất tiêu đề của tất cả phim chính kịch
const titles = jsonpath.query(data, '$.movies.drama[*].title');
console.log(titles); // Kết quả: ["The Shawshank Redemption", "Forrest Gump"]
Tương tự, trong Python, bạn có thể sử dụng thư viện jsonpath-ng
:
from jsonpath_ng import jsonpath, parse
# Dữ liệu JSON mẫu
data = {
"movies": {
"action": [
{"title": "Mad Max: Fury Road", "director": "George Miller", "year": 2015, "rating": 8.1},
{"title": "John Wick", "director": "Chad Stahelski", "year": 2014, "rating": 7.4}
],
"drama": [
{"title": "The Shawshank Redemption", "director": "Frank Darabont", "year": 1994, "rating": 9.3},
{"title": "Forrest Gump", "director": "Robert Zemeckis", "year": 1994, "rating": 8.8}
],
"comedy": [
{"title": "The Grand Budapest Hotel", "director": "Wes Anderson", "year": 2014, "rating": 8.1}
]
}
}
# Trích xuất tiêu đề của tất cả phim chính kịch
jsonpath_expr = parse('$.movies.drama[*].title')
titles = [match.value for match in jsonpath_expr.find(data)]
print(titles) # Kết quả: ["The Shawshank Redemption", "Forrest Gump"]
Sử dụng JSONPath trong Apidog

Apidog là một công cụ linh hoạt được thiết kế để đơn giản hóa quá trình làm việc với API và nó hỗ trợ JSONPath ngay từ đầu.

Dưới đây là cách Apidog có thể giúp bạn tận dụng sức mạnh của JSONPath một cách hiệu quả:
Đầu tiên, bạn cần gửi yêu cầu đến các API của mình và xem các phản hồi trực tiếp với Apidog. Sau đó, bạn có thể sử dụng giao diện được cung cấp để áp dụng một truy vấn JSONPath để trích xuất tiêu đề của tất cả phim hành động từ phản hồi.

Từ ảnh chụp màn hình trên, bạn sẽ thấy rằng (1) chúng tôi gửi một yêu cầu GET
đến máy chủ của chúng tôi - tôi đã tạo một máy chủ express đơn giản sử dụng dữ liệu JSON mà chúng tôi đã lấy ở trên làm phản hồi. Sau đó tôi chuyển sang tab Post Processors (2), và thêm một quy trình mới - Extract Variable
(3).
Khi nhấp vào Extract Variable
, bạn sẽ được hiển thị trang bên dưới;

Bạn có thể đặt tên biến (1) nếu bạn thích. Các biến rất hữu ích nếu bạn muốn theo dõi hoặc xây dựng các API khác nhau và bạn cần một nơi duy nhất để quản lý cấu hình chung. Các biến ở đây giống như các tệp .env
.
Bước khác là gõ JSONPath mà bạn muốn lọc ra (2). Trong trường hợp của chúng ta ở đây, chúng ta muốn lấy tiêu đề của các bộ phim trong mảng hành động của JSON. Một khi bạn gõ đường dẫn cần thiết, hãy nhấp vào nút mũi tên (3) để mở trang phản hồi của truy vấn như hình dưới.

Như bạn có thể thấy từ phản hồi ở trên, Apidog đã lọc ra các tiêu đề của các bộ phim trong mảng hành động và hiển thị chúng cho chúng ta.
Nếu bạn muốn thử nghiệm điều này, hãy đảm bảo tải xuống và cài đặt Apidog và gửi yêu cầu đầu tiên của bạn với nó.
Kết luận
JSONPath là một công cụ vô giá để điều hướng và trích xuất dữ liệu từ các phản hồi JSON trong API. Nó đơn giản hóa quá trình làm việc với các cấu trúc JSON phức tạp, giúp quy trình phát triển của bạn trở nên hiệu quả hơn. Bằng cách tích hợp JSONPath với các công cụ như Apidog, bạn có thể dễ dàng lọc và truy xuất chính xác dữ liệu mà bạn cần, nâng cao quy trình kiểm thử và gỡ lỗi API của bạn. Dù bạn đang trích xuất tiêu đề phim, lọc các bản ghi cụ thể, hay xác thực các phản hồi, JSONPath cung cấp một cách rõ ràng, ngắn gọn để xử lý dữ liệu JSON. Hãy thử nghiệm trong dự án tiếp theo của bạn và cảm nhận sự đơn giản trong quy trình mà nó mang lại.