sql >> Base de Datos >  >> RDS >> MariaDB

MariaDB JSON_REPLACE() explicado

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.