В MariaDB, JSON_VALUE()
е вградена функция, която връща скаларна стойност от JSON документ. По-конкретно, той връща скалара, определен от предоставения път.
Синтаксис
Синтаксисът е така:
JSON_VALUE(json_doc, път)
Където json_doc
е JSON документът и път
е път в документа.
Пример
Ето пример за демонстрация.
SET @json_document =' { "name":"Wag", "type":"Dog", "weight":20 }';SELECT JSON_VALUE(@json_document, '$.name');код>
Резултат:
+----------------------------------------+| JSON_VALUE(@json_document, '$.name') |+------------------------------------- -+| Размахване |+----------------------------------------+
Несъществуващ път
Предаването на път, който не съществува в JSON документа, води до NULL
.
Пример:
SET @json_document =' { "name":"Wag", "type":"Dog", "weight":20 }';SELECT JSON_VALUE(@json_document, '$.color');код>
Резултат:
+---------------------------------------+| JSON_VALUE(@json_document, '$.color') |+------------------------------------- --+| NULL |+---------------------------------------+
Масиви
Ето пример за връщане на данни от масив:
SET @json_document =' { "_id" :1, "awards" :[ "Най-добро куче", "Най-добро куче", "Най-голямо куче" ] }';SELECT JSON_VALUE(@json_document, '$. награди[1]');
Резултат:
+------------------------------------+| JSON_VALUE(@json_document, '$.awards[1]') |+---------------------------------- ---------+| Най-добро куче |+----------------------------------------------------+предварително>Масивите са базирани на нула и така
$.awards[1]
извлича втория елемент отнаградите
масив.Вложени обекти
Ето пример за получаване на стойност от обект, вложен в друг обект:
SET @json_document =' { "_id" :1, "name" :"Wag", "details" :{ "type" :"Dog", "weight" :20, "awards" :{ „Награди за кучета във Флорида“ :„Най-добро куче“, „Ню Йорк Маратон“ :„Най-бързото куче“, „Сумо 2020“ :„Най-голямото куче“ } } }';ИЗБЕРЕТЕ JSON_VALUE( @json_document, '$.details.awards.Florida Награди за кучета ) КАТО Резултат;
Резултат:
+--------+| Резултат |+--------+| Топ куче |+---------+Нескаларни стойности
Опитът за връщане на нескаларна стойност (например обект или масив) връща
NULL
.Пример:
SET @json_document =' { "_id" :1, "name" :"Wag", "details" :{ "type" :"Dog", "weight" :20, "awards" :{ „Награди за кучета във Флорида“ :„Най-добро куче“, „Ню Йорк маратон“ :„Най-бързото куче“, „Сумо 2020“ :„Най-голямото куче“ } } }';ИЗБЕРЕТЕ JSON_VALUE( @json_document, '$.details.awards' ) КАТО Резултат;
Резултат:
+--------+| Резултат |+--------+| NULL |+--------+За да върнете нескаларна стойност, използвайте
JSON_QUERY()
функция илиJSON_EXTRACT()
функция.Нулеви аргументи
Ако някой аргумент е
NULL
, резултатът еNULL
:SELECT JSON_VALUE(null, '$.type'), JSON_VALUE('{"a":1}', null);
Резултат:
+----------------------------+---------------- ------------+| JSON_VALUE(null, '$.type') | JSON_VALUE('{"a":1}', null) |+----------------------------+----- ------------------------+| NULL | NULL |+----------------------------+-------------- -----------+Неправилен брой параметри
Предоставянето на без аргументи води до грешка:
ИЗБЕРЕТЕ JSON_VALUE();
Резултат:
ГРЕШКА 1582 (42000):Неправилен брой параметри в извикването на естествена функция „JSON_VALUE“Същото е, когато предоставите твърде малко или твърде много аргументи:
SELECT JSON_VALUE('{ "a":1}');
Резултат:
ГРЕШКА 1582 (42000):Неправилен брой параметри в извикването на естествена функция „JSON_VALUE“