sql >> Databasteknik >  >> RDS >> MariaDB

MariaDB JSON_QUERY() Förklarad

I MariaDB, JSON_QUERY() är en inbyggd funktion som returnerar ett objekt eller array från ett JSON-dokument, baserat på den angivna sökvägen.

Det liknar JSON_VALUE() funktion, förutom att den returnerar ett objekt eller en matris istället för en skalär (JSON_VALUE() returnerar en skalär).

Syntax

Syntaxen ser ut så här:

JSON_QUERY(json_doc, sökväg) 

Där json_doc är JSON-dokumentet och sökväg är en sökväg i dokumentet.

Exempel

Här är ett exempel att visa.

SET @json_document =' { "_id" :1, "name" :"Wag", "details" :{ "type" :"Hund", "weight" :20, "awards" :{ "Florida Dog Awards" :"Top Dog", "New York Marathon" :"Faste Dog", "Sumo 2020" :"Biggest Dog" } } }';SELECT JSON_QUERY(@json_document, '$.details'); 

Resultat:

{ "type" :"Hund", "vikt" :20, "awards" :{ "Florida Dog Awards" :"Top Dog", "New York Marathon" :"Snabbaste hund", "Sumo 2020" :"Största hund" }}

Vi kan använda punktnotation för att gå ner till nästa kapslade objekt:

SET @json_document =' { "_id" :1, "name" :"Wag", "details" :{ "type" :"Hund", "weight" :20, "awards" :{ "Florida Dog Awards" :"Top Dog", "New York Marathon" :"Faste Dog", "Sumo 2020" :"Biggest Dog" } } }';SELECT JSON_QUERY(@json_document, '$.details.awards'); 

Resultat:

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

Arrayer

Här är ett exempel på att returnera en array:

SET @json_document =' { "_id" :1, "awards" :[ "Top Dog", "Best Dog", "Biggest Dog" ] }';SELECT JSON_QUERY(@json_document, '$. utmärkelser'); 

Resultat:

+--------------------------------------------------+| JSON_QUERY(@json_document, '$.awards') |+------------------------------------------------ -----+| [ "Topphund", "Bästa hund", "Största hund" ] |+-------------------------------- ----------+

Om du vill returnera ett faktiskt arrayelement, prova JSON_VALUE() funktion.

Icke-existerande sökväg

Att skicka en sökväg som inte finns i JSON-dokumentet resulterar i NULL .

Exempel:

SET @json_document =' { "_id" :1, "awards" :[ "Top Dog", "Best Dog", "Biggest Dog" ] }';SELECT JSON_QUERY(@json_document, '$. typ'); 

Resultat:

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

Skalära värden

Ett försök att returnera ett skalärt värde returnerar NULL .

Exempel:

SELECT JSON_QUERY('{ "weight":10 }', '$.weight'); 

Resultat:

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

För att returnera ett skalärt värde, använd JSON_VALUE() funktion.

Nollargument

Om något argument är NULL , resultatet är NULL :

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

Resultat:

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

Felaktig parameterräkning

Att inte tillhandahålla några argument resulterar i ett fel:

VÄLJ JSON_QUERY(); 

Resultat:

ERROR 1582 (42000):Fel parameterantal i anropet till den inbyggda funktionen 'JSON_QUERY'

Det är samma sak när du ger för få eller för många argument:

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

Resultat:

ERROR 1582 (42000):Fel parameterantal i anropet till den inbyggda funktionen 'JSON_QUERY'

  1. Tips på PostgreSQL

  2. Hur man begränsar MySQL-portåtkomst

  3. Hur man gör sql-tuning i Oracle

  4. Varför är det bäst att lagra ett telefonnummer som en sträng kontra heltal?