In MariaDB, JSON_ARRAY_INSERT() è una funzione incorporata che inserisce un valore in un documento JSON e restituisce il risultato.
Sintassi
La sintassi è questa:
JSON_ARRAY_INSERT(json_doc, path, value[, path, value] ...)
Dove json_doc è il documento JSON, path è il percorso in cui vuoi inserire il/i valore/i e il value è il valore da inserire.
Esempio
Ecco un esempio da dimostrare.
SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', 3); Risultato:
+-------------------------------------------+
| JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', 3) |
+-------------------------------------------+
| [0, 3, 1, 2] |
+-------------------------------------------+
In questo caso, il valore 3 è stato inserito nell'array nella posizione 1 . Gli array sono a base zero, quindi diventa il secondo elemento nell'array.
Inserisci più valori
Puoi inserire più valori in una singola chiamata a JSON_ARRAY_INSERT() .
Esempio:
SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[0]', 4, '$[2]', 5); Risultato:
+------------------------------------------------------+
| JSON_ARRAY_INSERT('[0, 1, 2]', '$[0]', 4, '$[2]', 5) |
+------------------------------------------------------+
| [4, 0, 5, 1, 2] |
+------------------------------------------------------+ La valutazione viene eseguita da sinistra a destra.
Ecco cosa succede se cambiamo il path /value argomenti in giro:
SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[2]', 5, '$[0]', 4); Risultato:
+------------------------------------------------------+
| JSON_ARRAY_INSERT('[0, 1, 2]', '$[2]', 5, '$[0]', 4) |
+------------------------------------------------------+
| [4, 0, 1, 5, 2] |
+------------------------------------------------------+ Matrici multiple
Puoi inserire valori in più di un array all'interno della stessa chiamata a JSON_ARRAY_INSERT() .
Esempio:
SET @json_doc = '{"a": [0, 1], "b": [2, 3]}';
SELECT JSON_ARRAY_INSERT(@json_doc, '$.a[1]', 4, '$.b[2]', 5); Risultato:
+--------------------------------------------------------+
| JSON_ARRAY_INSERT(@json_doc, '$.a[1]', 4, '$.b[2]', 5) |
+--------------------------------------------------------+
| {"a": [0, 4, 1], "b": [2, 3, 5]} |
+--------------------------------------------------------+ Matrici nidificate
Ecco un esempio di inserimento di un valore in una matrice nidificata:
SET @json_doc = '[0, 1, [2, 3]]';
SELECT JSON_ARRAY_INSERT(@json_doc, '$[2][1]', 4); Risultato:
+--------------------------------------------+ | JSON_ARRAY_INSERT(@json_doc, '$[2][1]', 4) | +--------------------------------------------+ | [0, 1, [2, 4, 3]] | +--------------------------------------------+
Documento JSON più grande
Ecco un esempio con un documento JSON leggermente più grande.
Uso anche JSON_DETAILED() per abbellire il risultato:
SET @json_doc = '{
"pet": {
"name": "Fluffy",
"diet": ["Fish", "Water"]
}
}';
SELECT JSON_DETAILED(
JSON_ARRAY_INSERT(
@json_doc,
'$.pet.diet[1]',
'Chicken')
); Risultato:
{
"pet":
{
"name": "Fluffy",
"diet":
[
"Fish",
"Chicken",
"Water"
]
}
} Argomenti nulli
Se il primo argomento è NULL , il risultato è NULL :
SELECT JSON_ARRAY_INSERT(null, '$[1]', 4); Risultato:
+------------------------------------+ | JSON_ARRAY_INSERT(null, '$[1]', 4) | +------------------------------------+ | NULL | +------------------------------------+
Lo stesso vale per il path argomento:
SELECT JSON_ARRAY_INSERT('[0, 1, 2, 3]', null, 4); Risultato:
+--------------------------------------------+
| JSON_ARRAY_INSERT('[0, 1, 2, 3]', null, 4) |
+--------------------------------------------+
| NULL |
+--------------------------------------------+
Tuttavia, se il value l'argomento è NULL , quindi NULL viene inserito nell'array:
SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', null); Risultato:
+----------------------------------------------+
| JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', null) |
+----------------------------------------------+
| [0, null, 1, 2] |
+----------------------------------------------+
Puoi anche usare JSON_ARRAY_APPEND() per aggiungere valori a una matrice.