sql >> Databasteknik >  >> RDS >> MariaDB

MariaDB JSON_VALUE() Förklarad

I MariaDB, JSON_VALUE() är en inbyggd funktion som returnerar ett skalärt värde från ett JSON-dokument. Mer specifikt returnerar den skalären som anges av den angivna sökvägen.

Syntax

Syntaxen ser ut så här:

JSON_VALUE(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 =' { "name":"Wag", "type":"Hund", "weight":20 }';SELECT JSON_VALUE(@json_document, '$.name'); 

Resultat:

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

Icke-existerande sökväg

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

Exempel:

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

Resultat:

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

Arrayer

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

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

Resultat:

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

Arrayer är nollbaserade, och så $.awards[1] extraherar det andra elementet i awards array.

Inkapslade objekt

Här är ett exempel på att få ett värde från ett objekt kapslat inuti ett annat 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_VALUE( @json_document, '$.details.awards.Florida Dog Awards' ) AS-resultat; 

Resultat:

+--------+| Resultat |+---------+| Top Dog |+---------+

Ickeskalära värden

Ett försök att returnera ett icke-skalärt värde (t.ex. ett objekt eller en array) returnerar NULL .

Exempel:

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_VALUE( @json_document, '$.details.awards' ) AS-resultat; 

Resultat:

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

För att returnera ett icke-skalärt värde, använd JSON_QUERY() funktion eller JSON_EXTRACT() funktion.

Nollargument

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

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

Resultat:

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

Felaktig parameterräkning

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

VÄLJ JSON_VALUE(); 

Resultat:

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

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

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

Resultat:

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

  1. Skapar en trigger som endast körs när en ny tabell skapas

  2. Slutför Laravel 8 Soft Delete &Restore Deleted Records Tutorial

  3. MySQL månadsförsäljning för de senaste 12 månaderna inklusive månader utan rea

  4. MySQL väljer 10 slumpmässiga rader från 600 000 rader snabbt