Truy vấn JSONPath API
Lấy dữ liệu trong JSON bằng JSONPath (RFC 9535: ký tự đại diện, tìm đệ quy, cắt mảng, bộ lọc có hàm) hoặc JSON Pointer, kèm đường dẫn của từng kết quả.
API truy vấn JSON chạy một biểu thức JSONPath trên tài liệu JSON và trả về các giá trị khớp cùng đường dẫn chuẩn hoá của chúng. API theo RFC 9535: chọn thuộc tính và chỉ số ($.store.book[0], $["khóa có dấu cách"], chỉ số âm), ký tự đại diện, tìm đệ quy ($..price), cắt mảng có bước ([1:5:2], [::-1]), hợp ([0,2]) và bộ lọc như $..book[?@.price < 10 && @.category == "fiction"].title.
Bộ lọc hỗ trợ kiểm tra tồn tại ([?@.isbn]), so sánh số và chuỗi, &&, ||, !, dấu ngoặc, tham chiếu gốc ($) và các hàm length(), count(), match(), search() (biểu thức chính quy, có chặn mẫu chạy quá lâu như API regex).
Truyền pointer=/store/book/1/title thay cho path để đọc một giá trị bằng JSON Pointer (RFC 6901). Kết quả giới hạn 10.000 giá trị (limit, mặc định 1.000).
Tham số
| Tên | Vị trí | Kiểu | Bắt buộc | Mặc định | |
|---|---|---|---|---|---|
json | body | object | có | Tài liệu JSON (object hoặc chuỗi JSON). | |
path | body|query | string | không | Biểu thức JSONPath bắt đầu bằng $. | |
pointer | body|query | string | không | JSON Pointer thay cho path, ví dụ /a/0. | |
limit | body|query | number | không | 1000 | Số giá trị tối đa trả về. |
Ví dụ
curl -X POST "https://apibox.io.vn/v1/json-query" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"json":{"store":{"book":[{"title":"Sayings","price":8.95},{"title":"Sword","price":12.99},{"title":"Moby Dick","price":8.99,"isbn":"0-553-21311-3"}]}},"path":"$..book[?@.price < 10].title"}'const res = await fetch('https://apibox.io.vn/v1/json-query', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"json": {
"store": {
"book": [
{
"title": "Sayings",
"price": 8.95
},
{
"title": "Sword",
"price": 12.99
},
{
"title": "Moby Dick",
"price": 8.99,
"isbn": "0-553-21311-3"
}
]
}
},
"path": "$..book[?@.price < 10].title"
}),
});
const data = await res.json();
console.log(data);import requests
res = requests.post(
"https://apibox.io.vn/v1/json-query",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"json": {"store": {"book": [{"title": "Sayings", "price": 8.95}, {"title": "Sword", "price": 12.99}, {"title": "Moby Dick", "price": 8.99, "isbn": "0-553-21311-3"}]}}, "path": "$..book[?@.price < 10].title"},
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/json-query');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"json":{"store":{"book":[{"title":"Sayings","price":8.95},{"title":"Sword","price":12.99},{"title":"Moby Dick","price":8.99,"isbn":"0-553-21311-3"}]}},"path":"$..book[?@.price < 10].title"}',
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));Kết quả trả về
{
"path": "$..book[?@.price < 10].title",
"count": 2,
"truncated": false,
"values": [
"Sayings",
"Moby Dick"
],
"paths": [
"$['store']['book'][0]['title']",
"$['store']['book'][2]['title']"
]
}
Ứng dụng
- Lấy trường dữ liệu từ phản hồi API bên thứ ba trong công cụ no-code
- Thử biểu thức JSONPath trước khi dùng trong code, hệ thống giám sát
- Trích xuất giá trị từ file JSON lớn
- Dạy và debug JSONPath
Hỏi đáp
Dùng phương ngữ JSONPath nào?
RFC 9535, chuẩn IETF năm 2024, trùng với cú pháp Goessner gốc ở các trường hợp thông dụng. Dạng lọc cũ ?(@.x) có ngoặc vẫn được chấp nhận.
Đường dẫn kết quả trông thế nào?
Dạng chuẩn hoá như $['store']['book'][0]['title'], mỗi giá trị một đường dẫn, cùng thứ tự.
Có truy vấn bằng JSON Pointer được không?
Được, pointer=/a/0/b trả về một giá trị và found=false nếu không tồn tại.
API liên quan
Kiểm tra JSON
Kiểm tra cú pháp JSON, báo đúng dòng và cột bị lỗi, và validate dữ liệu theo JSON Schema (draft 4, 7, 2019-09 hoặc 2020-12).
{ }Định dạng JSON
Làm đẹp JSON với thụt lề 0-8 dấu cách hoặc tab, rút gọn (minify) hoặc sắp xếp key theo bảng chữ cái. Báo lỗi cú pháp kèm dòng và cột.
CSVCSV sang JSON
Chuyển CSV thành mảng object JSON theo dòng tiêu đề, tự nhận dấu phân cách, tự chuyển số và boolean, báo lỗi từng dòng.