sql >> Database teknologi >  >> RDS >> MariaDB

MariaDB JSON_VALUE() Forklaret

I MariaDB, JSON_VALUE() er en indbygget funktion, der returnerer en skalarværdi fra et JSON-dokument. Mere specifikt returnerer den den skalar, der er angivet af den angivne sti.

Syntaks

Syntaksen ser sådan ud:

JSON_VALUE(json_doc, sti) 

Hvor json_doc er JSON-dokumentet og sti er en sti i dokumentet.

Eksempel

Her er et eksempel til at demonstrere.

SET @json_document =' { "name":"Wag", "type":"Hund", "weight":20 }';SELECT JSON_VALUE(@json_document, '$.name'); 

Resultat:

+---------------------------------------------+| JSON_VALUE(@json_document, '$.name') |+------------------------------------------------ -+| Wag |+---------------------------------------------+

Ikke-eksisterende sti

At sende en sti, der ikke findes i JSON-dokumentet, resulterer i NULL .

Eksempel:

SET @json_document =' { "name":"Wag", "type":"Hund", "weight":20 }';SELECT JSON_VALUE(@json_document, '$.color'); 

Resultat:

+----------------------------------------------+| JSON_VALUE(@json_document, '$.color') |+------------------------------------------------ --+| NULL |+-----------------------------------------------+

Arrays

Her er et eksempel på returnering af data fra et array:

SET @json_document =' { "_id" :1, "awards" :[ "Tophund", "Bedste hund", "Største hund" ] }';SELECT JSON_VALUE(@json_document, '$. priser[1]'); 

Resultat:

+----------------------------------------------+| JSON_VALUE(@json_document, '$.awards[1]') |+---------------------------------------- ----------+| Bedste hund |+----------------------------------------------------+ 

Arrays er nul-baserede, og derfor $.awards[1] udtrækker det andet element i awards array.

Indlejrede objekter

Her er et eksempel på at få en værdi fra et objekt indlejret i et andet objekt:

SET @json_document =' { "_id" :1, "name" :"Wag", "details" :{ "type" :"Hund", "vægt" :20, "awards" :{ "Florida Dog Awards" :"Top Dog", "New York Marathon" :"Hurtigste hund", "Sumo 2020" :"Biggest Dog" } } }';SELECT JSON_VALUE( @json_document, '$.details.awards.Florida Dog Awards' ) AS Resultat; 

Resultat:

+--------+| Resultat |+--------+| Tophund |+---------+

Ikke-skalære værdier

Forsøg på at returnere en ikke-skalær værdi (f.eks. et objekt eller en matrix) returnerer NULL .

Eksempel:

SET @json_document =' { "_id" :1, "name" :"Wag", "details" :{ "type" :"Hund", "vægt" :20, "awards" :{ "Florida Dog Awards" :"Top Dog", "New York Marathon" :"Hurtigste hund", "Sumo 2020" :"Biggest Dog" } } }';SELECT JSON_VALUE( @json_document, '$.details.awards' ) AS resultat; 

Resultat:

+--------+| Resultat |+--------+| NULL |+--------+

For at returnere en ikke-skalær værdi skal du bruge JSON_QUERY() funktion eller JSON_EXTRACT() funktion.

Nul-argumenter

Hvis et argument er NULL , resultatet er NULL :

VÆLG JSON_VALUE(null, '$.type'), JSON_VALUE('{"a":1}', null); 

Resultat:

+------------------------------------+---------------- ------------+| JSON_VALUE(null, '$.type') | JSON_VALUE('{"a":1}', null) |+--------------------------------+----- ------------------------+| NULL | NULL |+-----------------------------+------------------------ -----------+

Forkert parameterantal

Angivelse af ingen argumenter resulterer i en fejl:

VÆLG JSON_VALUE(); 

Resultat:

FEJL 1582 (42000):Forkert parameterantal i kaldet til den oprindelige funktion 'JSON_VALUE'

Det er det samme, når du giver for få eller for mange argumenter:

SELECT JSON_VALUE('{ "a":1}'); 

Resultat:

FEJL 1582 (42000):Forkert parameterantal i kaldet til den oprindelige funktion 'JSON_VALUE'

  1. Sådan implementeres Percona XtraDB Cluster 8 for høj tilgængelighed

  2. Hvordan undslipper man bogstaveligt procenttegn, når NO_BACKSLASH_ESCAPES-indstillingen er aktiveret?

  3. En oversigt over PostgreSQL &MySQL krydsreplikering

  4. Kan Hibernate arbejde med MySQL's ON DUPLICATE KEY UPDATE-syntaks?