Trong MySQL, JSON_VALUE()
hàm trích xuất một giá trị từ tài liệu JSON tại đường dẫn được chỉ định.
Hàm đã được giới thiệu trong MySQL 8.0.21.
Cú pháp
Cú pháp như sau:
JSON_VALUE(json_doc, path [RETURNING type] [on_empty] [on_error])
Ở đâu:
on_empty:
{NULL | ERROR | DEFAULT value} ON EMPTY
on_error:
{NULL | ERROR | DEFAULT value} ON ERROR
Ví dụ
Dưới đây là một ví dụ đơn giản để chứng minh:
SELECT JSON_VALUE( '{ "name" : "Wag", "type" : "Dog" }', '$.type' );
Kết quả:
Dog
Mảng
Dưới đây là một ví dụ về nhận giá trị từ một mảng:
SELECT JSON_VALUE( '{ "name" : "Wag", "scores" : [ 25, 36, 48 ] }', '$.scores[1]' );
Kết quả:
36
Mảng dựa trên 0, vì vậy 1
trả về phần tử thứ hai (0
sẽ trả về đầu tiên).
Tài liệu được nhúng
Dưới đây là một ví dụ về nhận giá trị từ một đối tượng được nhúng:
SELECT JSON_VALUE(
'{
"_id" : 1,
"details" : {
"name" : "Wag",
"type" : "Dog"
}
}',
'$.details.type'
);
Kết quả:
Dog
Loại trả lại
Dưới đây là một ví dụ về việc chỉ định kiểu trả về:
SELECT JSON_VALUE(
'{
"_id" : 1,
"details" : {
"name" : "Wag",
"type" : "Dog"
}
}',
'$.details' RETURNING json
);
Kết quả:
{"name": "Wag", "type": "Dog"}
Nếu bạn không chỉ định kiểu trả về, kiểu trả về là VARCHAR(512)
.
Kết quả trống
Theo mặc định, nếu không tìm thấy dữ liệu nào tại đường dẫn đã chỉ định, NULL
được trả lại:
SELECT JSON_VALUE(
'{
"name" : "Wag",
"type" : "Dog"
}',
'$.score'
);
Kết quả:
NULL
Tuy nhiên, các tùy chọn sau có thể được sử dụng để chỉ định rõ ràng điều gì sẽ xảy ra khi không tìm thấy dữ liệu nào tại đường dẫn đã cho:
-
NULL ON EMPTY
:Hàm trả vềNULL
; đây là hành vi mặc định. -
DEFAULT
:giá trịvalue
TRÊN EMPTYvalue
được cung cấp Được trả lại. Loại của giá trị phải khớp với loại của loại trả về. -
ERROR ON EMPTY
:Hàm báo lỗi.
Ví dụ:
SELECT JSON_VALUE(
'{
"name" : "Wag",
"type" : "Dog"
}',
'$.score'
DEFAULT 'Nothing found' ON EMPTY
);
Kết quả:
Nothing found
Lỗi
Phần sau có thể được sử dụng để chỉ định điều gì sẽ xảy ra khi xảy ra lỗi:
-
NULL ON ERROR
:JSON_VALUE()
trả vềNULL
; đây là hành vi mặc định. -
DEFAULT
:Đây là giá trị được trả về; giá trị của nó phải khớp với giá trị của kiểu trả về.value
LỖI BẬT -
ERROR ON ERROR
:Đã xảy ra lỗi.
Nếu được sử dụng, ON EMPTY
phải đặt trước bất kỳ ON ERROR
mệnh đề. Việc chỉ định chúng theo thứ tự sai dẫn đến lỗi cú pháp.
Chỉ mục
Như đã đề cập trong ghi chú phát hành MySQL 8.0.21, JSON_VALUE()
hàm đơn giản hóa việc tạo chỉ mục trên JSON
cột. Cuộc gọi tới JSON_VALUE(
tương đương với gọi json_doc
, path
QUAY LẠI type
) CAST( JSON_UNQUOTE( JSON_EXTRACT(
. json_doc
, path
)) AS type
)
Dưới đây là ví dụ được sử dụng trong ghi chú phát hành:
CREATE TABLE inventory(
items JSON,
INDEX i1 ( (JSON_VALUE(items, '$.name' RETURNING CHAR(50))) ),
INDEX i2 ( (JSON_VALUE(items, '$.price' RETURNING DECIMAL(5,2))) ),
INDEX i3 ( (JSON_VALUE(items, '$.quantity' RETURNING UNSIGNED)) )
);