Inserta un valor JSON en una posición específica de un documento JSON.
Formato del comando
JSON json_insert(JSON <input>, ARRAY STRING <path>, JSON <value>, BOOLEAN <insert_after>);
Descripción de parámetros
input: obligatorio. Contenido JSON que se modificará. Los tipos admitidos para este parámetro son JSON ARRAY y JSON OBJECT.
path: obligatorio. Posición donde se insertará el contenido JSON.
value: obligatorio. Contenido JSON por insertar.
-
insert_after: obligatorio.
-
Si el parámetro input contiene un arreglo y ya existe un valor en la ruta especificada, la posición de inserción se determina así:
true: inserta el nuevo valor después de la posición indicada.
false (valor predeterminado): inserta el nuevo valor antes de la posición indicada.
Si m>=n, el valor value se agrega al final del arreglo.
Si m<-n, el valor value se agrega al inicio del arreglo.
Si -n<=m<n, la posición donde se agrega value depende del valor de insert_after.
Si el parámetro input no contiene un arreglo, el valor se inserta al final de forma predeterminada.
NotaCuando el parámetro input incluye un arreglo, las reglas de inserción del contenido JSON dependen de su longitud. Si n es la longitud del arreglo y m la posición de inserción especificada:
-
Valor devuelto
El documento JSON modificado.
Ejemplos de uso
-
Ejemplo 1: Insertar un nuevo valor en una posición específica.
select json_insert(JSON'{"f1":1,"f2":{"t1":1,"t2":2}}', array("f2","t3"), JSON'3', false );El resultado es el siguiente.
+-----+ | _c0 | +-----+ | {"f1":1,"f2":{"t1":1,"t2":2,"t3":3}} | +-----+ -
Ejemplo 2: Insertar datos antes de un valor específico en un arreglo.
select json_insert(JSON'{"f1":[0,1,2]}', array("f1","0"), JSON'10', false);El resultado es el siguiente.
+-----+ | _c0 | +-----+ | {"f1":[10,0,1,2]} | +-----+ -
Ejemplo 3: Insertar datos después de un valor específico en un arreglo.
select json_insert(JSON'{"f1":[0,1,2]}', array("f1","0"), JSON'10', true);El resultado es el siguiente.
+-----+ | _c0 | +-----+ | {"f1":[0,10,1,2]} | +-----+ -
Ejemplo 4: Insertar en un arreglo cuando la posición indicada supera la longitud del arreglo; el valor se agrega al final.
select json_insert(JSON'{"f1":[0,1,2]}', array("f1","4"), JSON'4', false);El resultado es el siguiente.
+-----+ | _c0 | +-----+ | {"f1":[0,1,2,4]} | +-----+ -
Ejemplo 5: Insertar en un arreglo cuando la posición indicada es menor que el negativo de la longitud del arreglo; el valor se agrega al inicio.
select json_insert(JSON'{"f1":[0,1,2]}', array("f1","-4"), JSON'4', false);El resultado es el siguiente.
+-----+ | _c0 | +-----+ | {"f1":[4,0,1,2]} | +-----+ -
Ejemplo 6: Insertar en un arreglo cuando la posición se encuentra entre el negativo de la longitud y la longitud misma (exclusiva); el valor se inserta en la posición indicada.
select json_insert(JSON'{"f1":[0,1,2]}', array("f1","1"), JSON'10', false);El resultado es el siguiente.
+-----+ | _c0 | +-----+ | {"f1":[0,10,1,2]} | +-----+