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_doces el documento JSON.pathes la ruta del elemento para el cual insertar el nuevo valor.vales 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.