Trong MariaDB, JSON_VALUE()
là một hàm tích hợp trả về một giá trị vô hướng từ tài liệu JSON. Cụ thể hơn, nó trả về đại lượng vô hướng được chỉ định bởi đường dẫn được cung cấp.
Cú pháp
Cú pháp như sau:
JSON_VALUE(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 = '
{
"name": "Wag",
"type": "Dog",
"weight": 20
}
';
SELECT JSON_VALUE(@json_document, '$.name');
Kết quả:
+ -------------------------------------- + | JSON_VALUE (@json_document, '$ .name') | + ------------------------------------- - + | Wag | + -------------------------------------- +
Đườ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 = '
{
"name": "Wag",
"type": "Dog",
"weight": 20
}
';
SELECT JSON_VALUE(@json_document, '$.color');
Kết quả:
+ --------------------------------------- + | JSON_VALUE (@json_document, '$ .color') | + ------------------------------------- - + | NULL | + --------------------------------------- +
Mảng
Dưới đây là một ví dụ về việc trả về dữ liệu từ một mảng:
SET @json_document = '
{
"_id" : 1,
"awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ]
}
';
SELECT JSON_VALUE(@json_document, '$.awards[1]');
Kết quả:
+ ------------------------------------------- + | JSON_VALUE (@json_document, '$ .awards [1]') | + ---------------------------------- --------- + | Chú chó tốt nhất | + ------------------------------------------- +Mảng dựa trên 0 và vì vậy
$.awards[1]
trích yếu tố thứ hai củaawards
mảng.Đối tượng lồng nhau
Dưới đây là một ví dụ về việc lấy giá trị từ một đối tượng được lồng bên trong một đối tượng khác:
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_VALUE( @json_document, '$.details.awards.Florida Dog Awards' ) AS Result;
Kết quả:
+ --------- + | Kết quả | + --------- + | Top Dog | + --------- +Giá trị phi phương pháp
Cố gắng trả về một giá trị nonscalar (ví dụ:một đối tượng hoặc một mảng) trả về
NULL
.Ví dụ:
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_VALUE( @json_document, '$.details.awards' ) AS Result;
Kết quả:
+ -------- + | Kết quả | + -------- + | NULL | + -------- +Để trả về một giá trị phi mã, hãy sử dụng
JSON_QUERY()
hoặc hàmJSON_EXTRACT()
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_VALUE(null, '$.type'), JSON_VALUE('{"a":1}', null);
Kết quả:
+ ---------------------------- + ----------------- ------------ + | JSON_VALUE (null, '$ .type') | JSON_VALUE ('{"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_VALUE();
Kết quả:
ERROR 1582 (42000):Số lượng tham số không chính xác trong lệnh gọi hàm gốc 'JSON_VALUE'Đ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_VALUE('{ "a": 1}');
Kết quả:
ERROR 1582 (42000):Số lượng tham số không chính xác trong lệnh gọi hàm gốc 'JSON_VALUE'