MariaDB
 sql >> Base de données >  >> RDS >> MariaDB

MariaDB JSON_VALUE() expliqué

Dans MariaDB, JSON_VALUE() est une fonction intégrée qui renvoie une valeur scalaire à partir d'un document JSON. Plus précisément, il renvoie le scalaire spécifié par le chemin fourni.

Syntaxe

La syntaxe ressemble à ceci :

JSON_VALUE(json_doc, path) 

json_doc est le document JSON, et path est un chemin dans le document.

Exemple

Voici un exemple pour illustrer.

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

Résultat :

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

Chemin inexistant

Passer un chemin qui n'existe pas dans le document JSON donne NULL .

Exemple :

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

Résultat :

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

Tableaux

Voici un exemple de retour de données à partir d'un tableau :

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

Résultat :

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

Les tableaux sont basés sur zéro, et donc $.awards[1] extrait le second élément des awards tableau.

Objets imbriqués

Voici un exemple d'obtention d'une valeur à partir d'un objet imbriqué dans un autre objet :

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

Résultat :

+---------+| Résultat |+---------+| Top Dog |+---------+

Valeurs non scalaires

Tenter de renvoyer une valeur non scalaire (par exemple, un objet ou un tableau) renvoie NULL .

Exemple :

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

Résultat :

+--------+| Résultat |+--------+| NULL |+--------+

Pour renvoyer une valeur non scalaire, utilisez le JSON_QUERY() fonction ou la fonction JSON_EXTRACT() fonction.

Arguments nuls

Si un argument est NULL , le résultat est NULL :

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

Résultat :

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

Nombre de paramètres incorrect

Ne fournir aucun argument génère une erreur :

SELECT JSON_VALUE(); 

Résultat :

ERREUR 1582 (42000) :Nombre de paramètres incorrect dans l'appel à la fonction native 'JSON_VALUE'

Il en va de même lorsque vous fournissez trop ou trop peu d'arguments :

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

Résultat :

ERREUR 1582 (42000) :Nombre de paramètres incorrect dans l'appel à la fonction native 'JSON_VALUE'