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