En MySQL, JSON_INSERT()
La función inserta un valor en un documento JSON y devuelve el resultado.
Proporcione el documento JSON como primer argumento, seguido de la ruta para insertar, seguido del valor para insertar.
Sintaxis
La sintaxis es así:
JSON_INSERT(json_doc, path, val[, path, val] ...)
donde:
json_doc
es el documento JSON.path
es la ruta del elemento para el cual insertar el nuevo valor.val
es el nuevo valor que se insertará.
Los pares ruta-valor se evalúan de izquierda a derecha. El documento producido al evaluar un par se convierte en el nuevo valor contra el cual se evalúa el siguiente par.
Ejemplo 1:uso básico
Aquí hay un ejemplo para demostrarlo.
SELECT JSON_INSERT('{"a": 1, "b": 2}', '$.c', 3) AS 'Result';
Resultado:
+--------------------------+ | Result | +--------------------------+ | {"a": 1, "b": 2, "c": 3} | +--------------------------+
Entonces, el tercer argumento se inserta en la matriz en la ruta especificada. En este caso, uso $.c
para la ruta y 3
para que se inserte el valor. Esto da como resultado un par clave/valor de "c": 3
.
Aquí hay otro ejemplo:
SELECT JSON_INSERT('{"Name": "Homer", "Gender": "Male"}', '$.Age', 39) AS 'Result';
Resultado:
+------------------------------------------------+ | Result | +------------------------------------------------+ | {"Age": 39, "Name": "Homer", "Gender": "Male"} | +------------------------------------------------+
Ejemplo 2:intentar sobrescribir una ruta existente
Un par ruta-valor para una ruta existente en el documento se ignora y no sobrescribe el valor del documento existente.
Entonces, si modificamos el ejemplo anterior para insertar un valor en Name
(que ya existe), no se realiza ninguna inserción:
SELECT JSON_INSERT('{"Name": "Homer", "Gender": "Male"}', '$.Name', "Bart") AS 'Result';
Resultado:
+-------------------------------------+ | Result | +-------------------------------------+ | {"Name": "Homer", "Gender": "Male"} | +-------------------------------------+
Ejemplo 3:matrices
Puede insertar valores en una matriz utilizando una ruta más allá del final de la matriz existente. Ejemplo:
SELECT JSON_INSERT('[1, 2, 3]', '$[3]', 4) AS 'Result';
Resultado:
+--------------+ | Result | +--------------+ | [1, 2, 3, 4] | +--------------+
Sin embargo, si usa una ruta que ya existe en la matriz, la matriz permanecerá sin cambios:
SELECT JSON_INSERT('[1, 2, 3]', '$[1]', 4) AS 'Result';
Resultado:
+-----------+ | Result | +-----------+ | [1, 2, 3] | +-----------+
Si el valor existente no es una matriz, se ajusta automáticamente como una matriz y luego se amplía con el nuevo valor. Ejemplo:
SELECT JSON_INSERT('{"a": 1, "b": 2}', '$[2]', 3) AS 'Result';
Resultado:
+-----------------------+ | Result | +-----------------------+ | [{"a": 1, "b": 2}, 3] | +-----------------------+
Pero una vez más, si intenta insertar un valor en una ruta que ya existe, el documento JSON permanece sin cambios:
SELECT JSON_INSERT('{"a": 1, "b": 2}', '$[0]', 3) AS 'Result';
Resultado:
+------------------+ | Result | +------------------+ | {"a": 1, "b": 2} | +------------------+
Ejemplo 4:un documento JSON más grande
Aquí hay un ejemplo con un documento JSON (ligeramente) más grande.
SET @data = '{ "Person": { "Name": "Homer", "Hobbies": ["Eating", "Sleeping"] } }'; SELECT JSON_INSERT(@data, '$.Person.Hobbies[2]', "Base Jumping") AS 'Result';
Resultado:
+----------------------------------------------------------------------------------+ | Result | +----------------------------------------------------------------------------------+ | {"Person": {"Name": "Homer", "Hobbies": ["Eating", "Sleeping", "Base Jumping"]}} | +----------------------------------------------------------------------------------+
Consulte también JSON_ARRAY_INSERT()
y JSON_ARRAY_APPEND()
si necesita insertar o agregar datos en una matriz JSON.