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

JSON_VALUE() dans MySQL

Dans MySQL, le JSON_VALUE() La fonction extrait une valeur d'un document JSON au chemin spécifié.

La fonction a été introduite dans MySQL 8.0.21.

Syntaxe

La syntaxe ressemble à ceci :

JSON_VALUE(json_doc, path [RETURNING type] [on_empty] [on_error])

Où :

on_empty:
    {NULL | ERROR | DEFAULT value} ON EMPTY

on_error:
    {NULL | ERROR | DEFAULT value} ON ERROR

Exemple

Voici un exemple simple pour illustrer :

SELECT JSON_VALUE( '{ "name" : "Wag", "type" : "Dog" }', '$.type' );

Résultat :

Dog

Tableaux

Voici un exemple d'obtention d'une valeur à partir d'un tableau :

SELECT JSON_VALUE( '{ "name" : "Wag", "scores" : [ 25, 36, 48 ] }', '$.scores[1]' );

Résultat :

36

Les tableaux sont basés sur zéro, donc 1 renvoie le deuxième élément (0 renverrait le premier).

Documents intégrés

Voici un exemple d'obtention d'une valeur à partir d'un objet intégré :

SELECT JSON_VALUE(
    '{ 
        "_id" : 1, 
        "details" : { 
            "name" : "Wag",
            "type" : "Dog"
            } 
    }', 
    '$.details.type' 
    );

Résultat :

Dog

Type de retour

Voici un exemple de spécification du type de retour :

SELECT JSON_VALUE(
    '{ 
        "_id" : 1, 
        "details" : { 
            "name" : "Wag",
            "type" : "Dog"
            } 
    }', 
    '$.details' RETURNING json
    );

Résultat :

{"name": "Wag", "type": "Dog"}

Si vous ne spécifiez pas le type de retour, le type de retour est VARCHAR(512) .

Résultats vides

Par défaut, si aucune donnée n'est trouvée dans le chemin spécifié, NULL est renvoyé :

SELECT JSON_VALUE(
    '{ 
        "name" : "Wag",
        "type" : "Dog"
    }', 
    '$.score'
    );

Résultat :

NULL

Cependant, les options suivantes peuvent être utilisées pour spécifier explicitement ce qui doit se passer lorsqu'aucune donnée n'est trouvée dans le chemin donné :

  • NULL ON EMPTY :La fonction retourne NULL; c'est le comportement par défaut.
  • DEFAULT value SUR VIDE  :la value fournie est retourné. Le type de la valeur doit correspondre à celui du type de retour.
  • ERROR ON EMPTY  :La fonction renvoie une erreur.

Exemple :

SELECT JSON_VALUE(
    '{ 
        "name" : "Wag",
        "type" : "Dog"
    }', 
    '$.score' 
    DEFAULT 'Nothing found' ON EMPTY
    );

Résultat :

Nothing found

Erreurs

Les éléments suivants peuvent être utilisés pour spécifier ce qui se passe lorsqu'une erreur se produit :

  • NULL ON ERROR :JSON_VALUE() renvoie NULL; c'est le comportement par défaut.
  • DEFAULT value SUR ERREUR :Il s'agit de la valeur renvoyée ; sa valeur doit correspondre à celle du type de retour.
  • ERROR ON ERROR :Une erreur est renvoyée.

Si utilisé, ON EMPTY doit précéder tout ON ERROR clause. Les spécifier dans le mauvais ordre entraîne une erreur de syntaxe.

Index

Comme mentionné dans les notes de version de MySQL 8.0.21, le JSON_VALUE() la fonction simplifie la création d'index sur JSON Colonnes. Un appel à JSON_VALUE(json_doc , path RETOUR type ) équivaut à appeler CAST( JSON_UNQUOTE( JSON_EXTRACT(json_doc , path ) ) AS type ) .

Voici l'exemple utilisé dans les notes de version :

CREATE TABLE inventory(
    items JSON,
    INDEX i1 ( (JSON_VALUE(items, '$.name' RETURNING CHAR(50))) ),
    INDEX i2 ( (JSON_VALUE(items, '$.price' RETURNING DECIMAL(5,2))) ),
    INDEX i3 ( (JSON_VALUE(items, '$.quantity' RETURNING UNSIGNED)) )
);