Trong MariaDB, JSON_QUERY()
là một hàm tích hợp trả về một đối tượng hoặc mảng từ tài liệu JSON, dựa trên đường dẫn được cung cấp.
Nó tương tự với JSON_VALUE()
, ngoại trừ việc nó trả về một đối tượng hoặc mảng thay vì một đại lượng vô hướng (JSON_VALUE()
trả về một đại lượng vô hướng).
Cú pháp
Cú pháp như sau:
JSON_QUERY(json_doc, path)
Ở đâu json_doc
là tài liệu JSON và path
là một đường dẫn trong tài liệu.
Ví dụ
Đây là một ví dụ để chứng minh.
SET @json_document = '
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"weight" : 20,
"awards" : {
"Florida Dog Awards" : "Top Dog",
"New York Marathon" : "Fastest Dog",
"Sumo 2020" : "Biggest Dog"
}
}
}
';
SELECT JSON_QUERY(@json_document, '$.details');
Kết quả:
{"type":"Dog", "weight":20, "Prize":{"Florida Dog Awards":"Top Dog", "New York Marathon":"Fastest Dog", "Sumo 2020":"Con chó lớn nhất"}}
Chúng ta có thể sử dụng ký hiệu dấu chấm để đi xuống đối tượng lồng nhau tiếp theo:
SET @json_document = '
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"weight" : 20,
"awards" : {
"Florida Dog Awards" : "Top Dog",
"New York Marathon" : "Fastest Dog",
"Sumo 2020" : "Biggest Dog"
}
}
}
';
SELECT JSON_QUERY(@json_document, '$.details.awards');
Kết quả:
{"Florida Dog Awards":"Top Dog", "New York Marathon":"Fastest Dog", "Sumo 2020":"Biggest Dog"}
Mảng
Dưới đây là một ví dụ về việc trả về một mảng:
SET @json_document = '
{
"_id" : 1,
"awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ]
}
';
SELECT JSON_QUERY(@json_document, '$.awards');
Kết quả:
+ ------------------------------------------ + | JSON_QUERY (@json_document, '$ .awards') | + ------------------------------------- ----- + | ["Top Dog", "Best Dog", "Biggest Dog"] | + -------------------------------- ---------- +
Nếu bạn muốn trả về một phần tử mảng thực, hãy thử JSON_VALUE()
chức năng.
Đường dẫn không tồn tại
Chuyển một đường dẫn không tồn tại trong tài liệu JSON dẫn đến NULL
.
Ví dụ:
SET @json_document = '
{
"_id" : 1,
"awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ]
}
';
SELECT JSON_QUERY(@json_document, '$.type');
Kết quả:
+ -------------------------------------- + | JSON_QUERY (@json_document, '$ .type') | + ------------------------------------- - + | NULL | + -------------------------------------- +
Giá trị vô hướng
Cố gắng trả về một giá trị vô hướng sẽ trả về NULL
.
Ví dụ:
SELECT JSON_QUERY('{ "weight": 10 }', '$.weight');
Kết quả:
+ -------------------------------------------- + | JSON_QUERY ('{"weight":10}', '$ .weight') | + ------------------------------ -------------- + | NULL | + -------------------------------------------- +Để trả về một giá trị vô hướng, hãy sử dụng
JSON_VALUE()
chức năng.Đối số rỗng
Nếu bất kỳ đối số nào là
NULL
, kết quả làNULL
:SELECT JSON_QUERY(null, '$.type'), JSON_QUERY('{"a":1}', null);
Kết quả:
+ ---------------------------- + ----------------- ------------ + | JSON_QUERY (null, '$ .type') | JSON_QUERY ('{"a":1}', null) | + ---------------------------- + ----- ------------------------ + | NULL | NULL | + ---------------------------- + ------------------ ----------- +Đếm tham số không chính xác
Không cung cấp đối số dẫn đến lỗi:
SELECT JSON_QUERY();
Kết quả:
ERROR 1582 (42000):Số tham số không chính xác trong lệnh gọi hàm gốc 'JSON_QUERY'Điều này cũng xảy ra tương tự khi bạn cung cấp quá ít hoặc quá nhiều đối số:
SELECT JSON_QUERY('{ "a": 1}');
Kết quả:
ERROR 1582 (42000):Số tham số không chính xác trong lệnh gọi hàm gốc 'JSON_QUERY'