En MariaDB, JSON_ARRAY_INSERT() es una función integrada que inserta un valor en un documento JSON y devuelve el resultado.
Sintaxis
La sintaxis es así:
JSON_ARRAY_INSERT(json_doc, path, value[, path, value] ...)
Donde json_doc es el documento JSON, path es la ruta a la que desea insertar el/los valor/es, y value es el valor a insertar.
Ejemplo
Aquí hay un ejemplo para demostrarlo.
SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', 3); Resultado:
+-------------------------------------------+
| JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', 3) |
+-------------------------------------------+
| [0, 3, 1, 2] |
+-------------------------------------------+
En este caso, el valor 3 se insertó en la matriz en la posición 1 . Las matrices están basadas en cero, por lo que se convierte en el segundo elemento de la matriz.
Insertar valores múltiples
Puede insertar múltiples valores dentro de una sola llamada a JSON_ARRAY_INSERT() .
Ejemplo:
SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[0]', 4, '$[2]', 5); Resultado:
+------------------------------------------------------+
| JSON_ARRAY_INSERT('[0, 1, 2]', '$[0]', 4, '$[2]', 5) |
+------------------------------------------------------+
| [4, 0, 5, 1, 2] |
+------------------------------------------------------+ La evaluación se realiza de izquierda a derecha.
Esto es lo que sucede si cambiamos la path /value argumentos en torno a:
SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[2]', 5, '$[0]', 4); Resultado:
+------------------------------------------------------+
| JSON_ARRAY_INSERT('[0, 1, 2]', '$[2]', 5, '$[0]', 4) |
+------------------------------------------------------+
| [4, 0, 1, 5, 2] |
+------------------------------------------------------+ Matrices Múltiples
Puede insertar valores en más de una matriz dentro de la misma llamada a JSON_ARRAY_INSERT() .
Ejemplo:
SET @json_doc = '{"a": [0, 1], "b": [2, 3]}';
SELECT JSON_ARRAY_INSERT(@json_doc, '$.a[1]', 4, '$.b[2]', 5); Resultado:
+--------------------------------------------------------+
| JSON_ARRAY_INSERT(@json_doc, '$.a[1]', 4, '$.b[2]', 5) |
+--------------------------------------------------------+
| {"a": [0, 4, 1], "b": [2, 3, 5]} |
+--------------------------------------------------------+ Matrices anidadas
Aquí hay un ejemplo de cómo insertar un valor en una matriz anidada:
SET @json_doc = '[0, 1, [2, 3]]';
SELECT JSON_ARRAY_INSERT(@json_doc, '$[2][1]', 4); Resultado:
+--------------------------------------------+ | JSON_ARRAY_INSERT(@json_doc, '$[2][1]', 4) | +--------------------------------------------+ | [0, 1, [2, 4, 3]] | +--------------------------------------------+
Documento JSON más grande
Aquí hay un ejemplo con un documento JSON un poco más grande.
También uso JSON_DETAILED() para embellecer el resultado:
SET @json_doc = '{
"pet": {
"name": "Fluffy",
"diet": ["Fish", "Water"]
}
}';
SELECT JSON_DETAILED(
JSON_ARRAY_INSERT(
@json_doc,
'$.pet.diet[1]',
'Chicken')
); Resultado:
{
"pet":
{
"name": "Fluffy",
"diet":
[
"Fish",
"Chicken",
"Water"
]
}
} Argumentos nulos
Si el primer argumento es NULL , el resultado es NULL :
SELECT JSON_ARRAY_INSERT(null, '$[1]', 4); Resultado:
+------------------------------------+ | JSON_ARRAY_INSERT(null, '$[1]', 4) | +------------------------------------+ | NULL | +------------------------------------+
Lo mismo se aplica a la path argumento:
SELECT JSON_ARRAY_INSERT('[0, 1, 2, 3]', null, 4); Resultado:
+--------------------------------------------+
| JSON_ARRAY_INSERT('[0, 1, 2, 3]', null, 4) |
+--------------------------------------------+
| NULL |
+--------------------------------------------+
Sin embargo, si el value el argumento es NULL , luego NULL se inserta en la matriz:
SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', null); Resultado:
+----------------------------------------------+
| JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', null) |
+----------------------------------------------+
| [0, null, 1, 2] |
+----------------------------------------------+
También puede usar JSON_ARRAY_APPEND() para agregar valores a una matriz.