Dans MariaDB, JSON_ARRAY_APPEND() est une fonction intégrée qui ajoute des valeurs à la fin du ou des tableaux spécifiés dans un document JSON et renvoie le résultat.
Syntaxe
La syntaxe ressemble à ceci :
JSON_ARRAY_APPEND(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 ajouter la ou les valeurs, et value est la valeur à ajouter.
Exemple
Voici un exemple pour illustrer la fonction.
SET @json_doc = '[0, 1, 2, 3]';
SELECT JSON_ARRAY_APPEND(@json_doc, '$', 4); Résultat :
+--------------------------------------+ | JSON_ARRAY_APPEND(@json_doc, '$', 4) | +--------------------------------------+ | [0, 1, 2, 3, 4] | +--------------------------------------+
Dans ce cas, la valeur 4 a été ajouté à la fin du tableau.
Ajouter plusieurs valeurs
Vous pouvez ajouter plusieurs valeurs dans un seul appel à JSON_ARRAY_APPEND() .
Exemple :
SET @json_doc = '[0, 1, 2, 3]';
SELECT JSON_ARRAY_APPEND(@json_doc, '$', 4, '$', 5); Résultat :
+----------------------------------------------+ | JSON_ARRAY_APPEND(@json_doc, '$', 4, '$', 5) | +----------------------------------------------+ | [0, 1, 2, 3, 4, 5] | +----------------------------------------------+
Plusieurs tableaux
Vous pouvez ajouter des valeurs à plusieurs tableaux dans le même appel à JSON_ARRAY_APPEND() .
Exemple :
SET @json_doc = '{"a": [0, 1], "b": [2, 3]}';
SELECT JSON_ARRAY_APPEND(@json_doc, '$.a', 4, '$.b', 5); Résultat :
+--------------------------------------------------+
| JSON_ARRAY_APPEND(@json_doc, '$.a', 4, '$.b', 5) |
+--------------------------------------------------+
| {"a": [0, 1, 4], "b": [2, 3, 5]} |
+--------------------------------------------------+ Tableaux imbriqués
Voici un exemple d'ajout d'une valeur à un tableau imbriqué :
SET @json_doc = '[0, 1, [2, 3]]';
SELECT JSON_ARRAY_APPEND(@json_doc, '$[2]', 4); Résultat :
+-----------------------------------------+ | JSON_ARRAY_APPEND(@json_doc, '$[2]', 4) | +-----------------------------------------+ | [0, 1, [2, 3, 4]] | +-----------------------------------------+
Et dans l'exemple suivant, le document JSON d'origine ne contient pas de tableau imbriqué, mais JSON_ARRAY_APPEND() crée un tableau imbriqué basé sur notre chemin :
SET @json_doc = '[0, 1, 2, 3]';
SELECT JSON_ARRAY_APPEND(@json_doc, '$[3]', 4); Résultat :
+-----------------------------------------+ | JSON_ARRAY_APPEND(@json_doc, '$[3]', 4) | +-----------------------------------------+ | [0, 1, 2, [3, 4]] | +-----------------------------------------+
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", "Chicken"]
}
}';
SELECT JSON_DETAILED(
JSON_ARRAY_APPEND(
@json_doc,
'$.pet.diet',
'Water')
); Résultat :
{
"pet":
{
"name": "Fluffy",
"diet":
[
"Fish",
"Chicken",
"Water"
]
}
} Et en voici un qui crée un tableau imbriqué :
SET @json_doc = '{
"pet": {
"name": "Scratch",
"diet": ["Beef", "Water"]
}
}';
SELECT JSON_DETAILED(
JSON_ARRAY_APPEND(
@json_doc,
'$.pet.diet[1]',
'Beer')
); Résultat :
{
"pet":
{
"name": "Scratch",
"diet":
[
"Beef",
[
"Water",
"Beer"
]
]
}
} Arguments nuls
Si le premier argument est NULL , le résultat est NULL :
SELECT JSON_ARRAY_APPEND(null, '$', 4); Résultat :
+---------------------------------+ | JSON_ARRAY_APPEND(null, '$', 4) | +---------------------------------+ | NULL | +---------------------------------+
Il en va de même pour le path argument :
SET @json_doc = '[0, 1, 2, 3]';
SELECT JSON_ARRAY_APPEND(@json_doc, null, 4); Résultat :
+---------------------------------------+ | JSON_ARRAY_APPEND(@json_doc, null, 4) | +---------------------------------------+ | NULL | +---------------------------------------+
Cependant, si la value l'argument est NULL , puis NULL est ajouté au tableau :
SET @json_doc = '[0, 1, 2, 3]';
SELECT JSON_ARRAY_APPEND(@json_doc, '$', null); Résultat :
+-----------------------------------------+ | JSON_ARRAY_APPEND(@json_doc, '$', null) | +-----------------------------------------+ | [0, 1, 2, 3, null] | +-----------------------------------------+
Vous pouvez également utiliser JSON_ARRAY_INSERT() pour insérer des valeurs dans un tableau.