Dans MariaDB, JSON_ARRAY_INSERT()
est une fonction intégrée qui insère une valeur dans un document JSON et renvoie le résultat.
Syntaxe
La syntaxe ressemble à ceci :
JSON_ARRAY_INSERT(json_doc, path, value[, path, value] ...)
Où json_doc
est le document JSON, path
est le chemin d'accès à l'endroit où vous souhaitez insérer la ou les valeurs, et value
est la valeur à insérer.
Exemple
Voici un exemple pour illustrer.
SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', 3);
Résultat :
+------------------------------------------------+| JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', 3) |+--------------------------- ----------------+| [0, 3, 1, 2] |+---------------------------------------------------- ----+
Dans ce cas, la valeur 3
a été inséré dans le tableau à la position 1
. Les tableaux sont basés sur zéro, il devient donc le deuxième élément du tableau.
Insérer plusieurs valeurs
Vous pouvez insérer plusieurs valeurs dans un seul appel à JSON_ARRAY_INSERT()
.
Exemple :
SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[0]', 4, '$[2]', 5);
Résultat :
+------------------------------------------------------------ --------+| JSON_ARRAY_INSERT('[0, 1, 2]', '$[0]', 4, '$[2]', 5) |+------------------ -----------------------------------------+| [4, 0, 5, 1, 2] |+-------------------------------------------------- -----------------+
L'évaluation se fait de gauche à droite.
Voici ce qui se passe si nous changeons le path
/value
arguments autour :
SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[2]', 5, '$[0]', 4);
Résultat :
+------------------------------------------------------------ --------+| JSON_ARRAY_INSERT('[0, 1, 2]', '$[2]', 5, '$[0]', 4) |+------------------ -----------------------------------------+| [4, 0, 1, 5, 2] |+-------------------------------------------------- -----------------+
Plusieurs tableaux
Vous pouvez insérer des valeurs dans plusieurs tableaux dans le même appel à JSON_ARRAY_INSERT()
.
Exemple :
SET @json_doc = '{"a": [0, 1], "b": [2, 3]}';
SELECT JSON_ARRAY_INSERT(@json_doc, '$.a[1]', 4, '$.b[2]', 5);
Résultat :
+------------------------------------------------------------ ----------+| JSON_ARRAY_INSERT(@json_doc, '$.a[1]', 4, '$.b[2]', 5) |+--------------------- -----------------------------------+| {"a":[0, 4, 1], "b":[2, 3, 5]} |+----------------------- ---------------------------------+
Tableaux imbriqués
Voici un exemple d'insertion d'une valeur dans un tableau imbriqué :
SET @json_doc = '[0, 1, [2, 3]]';
SELECT JSON_ARRAY_INSERT(@json_doc, '$[2][1]', 4);
Résultat :
+-------------------------------------------------+| JSON_ARRAY_INSERT(@json_doc, '$[2][1]', 4) |+------------------------------- --------------+| [0, 1, [2, 4, 3]] |+----------------------------------- ---------+
Document JSON plus grand
Voici un exemple avec un document JSON légèrement plus grand.
J'utilise aussi JSON_DETAILED()
pour embellir le résultat :
SET @json_doc = '{
"pet": {
"name": "Fluffy",
"diet": ["Fish", "Water"]
}
}';
SELECT JSON_DETAILED(
JSON_ARRAY_INSERT(
@json_doc,
'$.pet.diet[1]',
'Chicken')
);
Résultat :
{ "pet":{ "name":"Fluffy", "diet":[ "Poisson", "Poulet", "Eau" ] }}
Arguments nuls
Si le premier argument est NULL
, le résultat est NULL
:
SELECT JSON_ARRAY_INSERT(null, '$[1]', 4);
Résultat :
+--------------------------------------------------+| JSON_ARRAY_INSERT(null, '$[1]', 4) |+----------------------------------- -+| NULL |+--------------------------------------------------+
Il en va de même pour le path
argument :
SELECT JSON_ARRAY_INSERT('[0, 1, 2, 3]', null, 4);
Résultat :
+-------------------------------------------------+| JSON_ARRAY_INSERT('[0, 1, 2, 3]', null, 4) |+------------------------------ --------------+| NULL |+-------------------------------------------------+Cependant, si la
value
l'argument estNULL
, puisNULL
est inséré dans le tableau :SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', null);
Résultat :
+------------------------------------------------------------ +| JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', nul) |+--------------------------- -------------------+| [0, nul, 1, 2] |+-------------------------------------------------- -------+Vous pouvez également utiliser
JSON_ARRAY_APPEND()
pour ajouter des valeurs à un tableau.