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

MariaDB JSON_QUERY() Forklaret

I MariaDB, JSON_QUERY() er en indbygget funktion, der returnerer et objekt eller array fra et JSON-dokument, baseret på den angivne sti.

Det ligner JSON_VALUE() funktion, bortset fra at den returnerer et objekt eller en matrix i stedet for en skalar (JSON_VALUE() returnerer en skalar).

Syntaks

Syntaksen ser sådan ud:

JSON_QUERY(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 =' { "_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_QUERY(@json_document, '$.details'); 

Resultat:

{ "type" :"Hund", "vægt" :20, "awards" :{ "Florida Dog Awards" :"Top Dog", "New York Marathon" :"Hurtigste hund", "Sumo 2020" :"Største hund" }}

Vi kan bruge punktnotation til at gå ned til det næste indlejrede 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_QUERY(@json_document, '$.details.awards'); 

Resultat:

{ "Florida Dog Awards" :"Top Dog", "New York Marathon" :"Fastest Dog", "Sumo 2020" :"Biggest Dog"}

Arrays

Her er et eksempel på returnering af et array:

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

Resultat:

+--------------------------------------------------+| JSON_QUERY(@json_document, '$.awards') |+------------------------------------------------ -----+| [ "Tophund", "Bedste hund", "Største hund" ] |+-------------------------------- ----------+

Hvis du vil returnere et faktisk array-element, så prøv JSON_VALUE() funktion.

Ikke-eksisterende sti

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

Eksempel:

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

Resultat:

+---------------------------------------------+| JSON_QUERY(@json_document, '$.type') |+------------------------------------------------ -+| NULL |+----------------------------------------------+

Skalære værdier

Forsøg på at returnere en skalarværdi returnerer NULL .

Eksempel:

SELECT JSON_QUERY('{ "vægt":10 }', '$.vægt'); 

Resultat:

+----------------------------------------------------+| JSON_QUERY('{ "vægt":10 }', '$.vægt') |+------------------------------------ --------------+| NULL |+----------------------------------------------------+ 

For at returnere en skalær værdi skal du bruge JSON_VALUE() funktion.

Nul-argumenter

Hvis et argument er NULL , resultatet er NULL :

SELECT JSON_QUERY(null, '$.type'), JSON_QUERY('{"a":1}', null); 

Resultat:

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

Forkert parameterantal

Angivelse af ingen argumenter resulterer i en fejl:

VÆLG JSON_QUERY(); 

Resultat:

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

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

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

Resultat:

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

  1. Amazon EC2, mysql afbryder start, fordi InnoDB:mmap (x bytes) mislykkedes; fejl nr 12

  2. En guide til brug af pgBouncer til PostgreSQL

  3. Forespørgselskombinationer med indlejret matrix af poster i JSON-datatype

  4. MySQL primære nøgler