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

JSON_ARRAY_APPEND() - Ajouter des valeurs à un tableau JSON dans MySQL

Lorsque vous utilisez des documents JSON avec MySQL, vous pouvez utiliser le JSON_ARRAY_APPEND() fonction pour ajouter de nouvelles valeurs à un tableau.

La façon dont cela fonctionne est que vous fournissez le document JSON comme premier argument, puis suivez-le avec le chemin à ajouter, suivi de la valeur à ajouter.

Dans MySQL 5.7, cette fonction s'appelait JSON_APPEND() mais ce nom n'est plus pris en charge.

Syntaxe

La syntaxe ressemble à ceci :

JSON_ARRAY_APPEND(json_doc, path, val[, path, val] ...)

Où :

  • json_doc est le document JSON.
  • path est le chemin de l'élément auquel ajouter la nouvelle valeur.
  • val est la nouvelle valeur qui sera ajoutée.

Les paires chemin-valeur sont évaluées de gauche à droite. Le document produit en évaluant une paire devient la nouvelle valeur par rapport à laquelle la paire suivante est évaluée.

Exemple 1 - Utilisation de base

Voici un exemple pour illustrer.

SELECT JSON_ARRAY_APPEND('[1, 2, 3]', '$', 4) AS 'Result';

Résultat :

+--------------+
| Result       |
+--------------+
| [1, 2, 3, 4] |
+--------------+

Ainsi, le 3ème argument est ajouté au tableau. Dans ce cas, j'utilise $ pour le chemin. Il s'agit d'un synonyme du document JSON, donc la valeur est ajoutée au tableau de niveau supérieur (qui, dans ce cas, se trouve être le seul tableau).

Exemple 2 – Tableau imbriqué

Voici un exemple d'ajout d'une valeur à un tableau imbriqué dans un autre tableau.

SELECT JSON_ARRAY_APPEND('[1, 2, [3, 4]]', '$[2]', 5) AS 'Result';

Résultat :

+-------------------+
| Result            |
+-------------------+
| [1, 2, [3, 4, 5]] |
+-------------------+

Donc ici, j'utilise $[2] comme chemin. Ceci spécifie le tableau au troisième élément (les tableaux utilisent une numérotation à partir de zéro, donc le décompte commence à zéro).

S'il n'y avait pas déjà un tableau à cet élément, un nouveau tableau est créé.

Comme ceci :

SELECT JSON_ARRAY_APPEND('[1, 2, 3]', '$[2]', 4) AS 'Result';

Résultat :

+----------------+
| Result         |
+----------------+
| [1, 2, [3, 4]] |
+----------------+

Exemple 3 – Un document JSON plus volumineux

Cet exemple utilise un document JSON (légèrement) plus grand. Cela montre comment le chemin change en fonction de l'emplacement du tableau dans le document.

SET @data = '{  
    "Person": {    
       "Name": "Homer", 
       "Hobbies": ["Eating", "Sleeping"]  
    }
 }';
SELECT JSON_ARRAY_APPEND(@data, '$.Person.Hobbies', "Base Jumping") AS 'Result';

Résultat :

+----------------------------------------------------------------------------------+
| Result                                                                           |
+----------------------------------------------------------------------------------+
| {"Person": {"Name": "Homer", "Hobbies": ["Eating", "Sleeping", "Base Jumping"]}} |
+----------------------------------------------------------------------------------+

Et tout comme dans l'exemple précédent, nous pouvons également créer un nouveau tableau imbriqué, si nécessaire :

SET @data = '{  
    "Person": {    
       "Name": "Homer", 
       "Hobbies": ["Eating", "Sleeping"]  
    }
 }';
SELECT JSON_ARRAY_APPEND(@data, '$.Person.Hobbies[0]', "Drinking") AS 'Result';

Résultat :

+--------------------------------------------------------------------------------+
| Result                                                                         |
+--------------------------------------------------------------------------------+
| {"Person": {"Name": "Homer", "Hobbies": [["Eating", "Drinking"], "Sleeping"]}} |
+--------------------------------------------------------------------------------+