В 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)) )
);