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

MariaDB JSON_QUERY() expliqué

Dans MariaDB, JSON_QUERY() est une fonction intégrée qui renvoie un objet ou un tableau à partir d'un document JSON, en fonction du chemin fourni.

C'est similaire au JSON_VALUE() fonction, sauf qu'elle renvoie un objet ou un tableau au lieu d'un scalaire (JSON_VALUE() renvoie un scalaire).

Syntaxe

La syntaxe ressemble à ceci :

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

Résultat :

{ "type" :"Chien", "weight" :20, "awards" :{ "Florida Dog Awards" :"Top Dog", "New York Marathon" :"Fastest Dog", "Sumo 2020" :"Le plus gros chien" }}

Nous pouvons utiliser la notation par points pour descendre jusqu'au prochain objet imbriqué :

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

Résultat :

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

Tableaux

Voici un exemple de renvoi d'un tableau :

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

Résultat :

+-------------------------------------------------------+| JSON_QUERY(@json_document, '$.awards') |+------------------------------------- -----+| [ "Meilleur chien", "Meilleur chien", "Le plus grand chien" ] |+-------------------------------- ----------+

Si vous voulez retourner un élément de tableau réel, essayez le JSON_VALUE() fonction.

Chemin inexistant

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

Exemple :

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

Résultat :

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

Valeurs scalaires

Tenter de renvoyer une valeur scalaire renvoie NULL .

Exemple :

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

Résultat :

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

Pour renvoyer une valeur scalaire, utilisez le JSON_VALUE() fonction.

Arguments nuls

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

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

Résultat :

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

Nombre de paramètres incorrect

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

SELECT JSON_QUERY(); 

Résultat :

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

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

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

Résultat :

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