В MySQL, JSON_VALUE()
функцията извлича стойност от JSON документ по посочения път.
Функцията е въведена в MySQL 8.0.21.
Синтаксис
Синтаксисът е така:
JSON_VALUE(json_doc, path [RETURNING type] [on_empty] [on_error])
Къде:
on_empty:
{NULL | ERROR | DEFAULT value} ON EMPTY
on_error:
{NULL | ERROR | DEFAULT value} ON ERROR
Пример
Ето един прост пример за демонстрация:
SELECT JSON_VALUE( '{ "name" : "Wag", "type" : "Dog" }', '$.type' );
Резултат:
Dog
Масиви
Ето пример за получаване на стойност от масив:
SELECT JSON_VALUE( '{ "name" : "Wag", "scores" : [ 25, 36, 48 ] }', '$.scores[1]' );
Резултат:
36
Масивите са базирани на нула, така че 1
връща втория елемент (0
ще върне първия).
Вградени документи
Ето пример за получаване на стойност от вграден обект:
SELECT JSON_VALUE(
'{
"_id" : 1,
"details" : {
"name" : "Wag",
"type" : "Dog"
}
}',
'$.details.type'
);
Резултат:
Dog
Тип връщане
Ето пример за определяне на типа на връщане:
SELECT JSON_VALUE(
'{
"_id" : 1,
"details" : {
"name" : "Wag",
"type" : "Dog"
}
}',
'$.details' RETURNING json
);
Резултат:
{"name": "Wag", "type": "Dog"}
Ако не посочите типа на връщане, типът на връщане е VARCHAR(512)
.
Празни резултати
По подразбиране, ако не бъдат намерени данни на посочения път, NULL
се връща:
SELECT JSON_VALUE(
'{
"name" : "Wag",
"type" : "Dog"
}',
'$.score'
);
Резултат:
NULL
Въпреки това, следните опции могат да се използват за изрично уточняване какво трябва да се случи, когато не бъдат намерени данни на дадения път:
NULL ON EMPTY
:Функцията връщаNULL
; това е поведението по подразбиране.DEFAULT
:предоставенатаvalue
НА ПРАЗНОvalue
се връща. Типът на стойността трябва да съвпада с този на връщания тип.ERROR ON EMPTY
:Функцията извежда грешка.
Пример:
SELECT JSON_VALUE(
'{
"name" : "Wag",
"type" : "Dog"
}',
'$.score'
DEFAULT 'Nothing found' ON EMPTY
);
Резултат:
Nothing found
Грешки
Следното може да се използва, за да посочите какво се случва, когато възникне грешка:
NULL ON ERROR
:JSON_VALUE()
връщаNULL
; това е поведението по подразбиране.DEFAULT
:Това е върнатата стойност; стойността му трябва да съвпада с тази на връщания тип.value
ПРИ ГРЕШКАERROR ON ERROR
:Получава се грешка.
Ако се използва, ON EMPTY
трябва да предхожда всеки ON ERROR
клауза. Посочването им в грешен ред води до синтактична грешка.
Индекси
Както е споменато в бележките за версията на MySQL 8.0.21, JSON_VALUE()
функцията опростява създаването на индекси в JSON
колони. Извикване на JSON_VALUE(
е еквивалентно на извикване на json_doc
). , path
ВРЪЩАНЕ на type
)CAST( JSON_UNQUOTE( JSON_EXTRACT(
.json_doc
) , path
) ) КАТО type
)
Ето примера, използван в бележките към изданието:
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)) )
);