En MariaDB, JSON_REPLACE()
es una función integrada que reemplaza los valores existentes en un documento JSON y devuelve el resultado.
Sintaxis
La sintaxis es así:
JSON_REPLACE(json_doc, path, val[, path, val] ...)
Ejemplo
Aquí hay un ejemplo para demostrarlo.
SET @json = '{ "name" : "Wag", "type" : "Cat" }';
SELECT JSON_REPLACE(@json, '$.type', 'Dog');
Resultado:
+--------------------------------------+ | JSON_REPLACE(@json, '$.type', 'Dog') | +--------------------------------------+ | {"name": "Wag", "type": "Dog"} | +--------------------------------------+
En este caso reemplacé el valor Cat
con Dog
.
Elementos de matriz
Para reemplazar un elemento de matriz, especifique el índice del elemento:
SET @json = '{ "name" : "Wag", "scores" : [8, 0, 9] }';
SELECT JSON_REPLACE(@json, '$.scores[1]', 7);
Resultado:
+---------------------------------------+ | JSON_REPLACE(@json, '$.scores[1]', 7) | +---------------------------------------+ | {"name": "Wag", "scores": [8, 7, 9]} | +---------------------------------------+
En este caso, el segundo elemento de la matriz se reemplazó con el nuevo valor. Las matrices están basadas en cero, por lo que $.scores[1]
se refiere al segundo elemento de la matriz.
Vías Múltiples
La sintaxis permite reemplazar valores en múltiples rutas con una sola llamada a JSON_REPLACE()
.
Cuando se proporcionan varias rutas, se evalúan de izquierda a derecha. Esto significa que el resultado de la evaluación anterior se utiliza como valor para la siguiente.
Primero, aquí hay un ejemplo que reemplaza varios valores en un documento, según su clave:
SET @json = '
{
"name" : "Flutter",
"type" : "Bird",
"weight" : 10
}
';
SELECT JSON_REPLACE(@json, '$.type', 'Bat', '$.weight', 20);
Resultado:
+------------------------------------------------------+ | JSON_REPLACE(@json, '$.type', 'Bat', '$.weight', 20) | +------------------------------------------------------+ | {"name": "Flutter", "type": "Bat", "weight": 20} | +------------------------------------------------------+
Cada valor fue reemplazado como se esperaba.
En el siguiente ejemplo, reemplazamos varios elementos en una matriz:
SET @json = '{ "scores" : [ 0, 1, 2, 3, 4, 5 ] }';
SELECT
JSON_REPLACE(
@json,
'$.scores[2]', "a",
'$.scores[4]', "b"
) AS Result;
Resultado:
+------------------------------------+ | Result | +------------------------------------+ | {"scores": [0, 1, "a", 3, "b", 5]} | +------------------------------------+
Argumentos nulos
Si el json_doc
o cualquiera de las path
argumentos es null
, el resultado es NULL
. Pero si el value
el argumento es null
, luego el valor se reemplaza a null
.
SELECT
JSON_REPLACE(null, '$.a', 1) AS a,
JSON_REPLACE('{"a":1}', null, 1) AS b,
JSON_REPLACE('{"a":1}', '$.a', null) AS c;
Resultado:
+------+------+-------------+ | a | b | c | +------+------+-------------+ | NULL | NULL | {"a": null} | +------+------+-------------+
En el siguiente ejemplo, falta uno de los argumentos de ruta de cada llamada a JSON_REPLACE()
. Esto da como resultado NULL
siendo devuelto para ambas llamadas:
SET @json = '{ "name" : "Wag", "type" : "Cat" }';
SELECT
JSON_REPLACE(@json, null, 'Bark', '$.type', 'Dog') AS a,
JSON_REPLACE(@json, '$.name', 'Bark', null, 'Dog') AS b;
Resultado:
+------+------+ | a | b | +------+------+ | NULL | NULL | +------+------+
Recuento de parámetros incorrecto
Llamando a JSON_REPLACE()
sin un argumento da como resultado un error:
SELECT JSON_REPLACE();
Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_REPLACE'
Es lo mismo cuando no se pasan suficientes argumentos:
SELECT JSON_REPLACE('{"a":1}');
Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_REPLACE'
Funciones similares
El JSON_INSERT()
función puede insertar nuevos datos.
El JSON_SET()
La función puede insertar nuevos datos y actualizar los datos existentes. Entonces JSON_SET()
es como JSON_INSERT()
y JSON_REPLACE()
en una función.