En MySQL, JSON_EXTRACT()
La función devuelve datos de un documento JSON. Los datos reales devueltos están determinados por la ruta que proporcione como argumento.
Proporciona el documento JSON como primer argumento, seguido de la ruta de los datos que se van a devolver. También puede proporcionar varias rutas para devolver datos desde varios lugares del documento.
Sintaxis
La sintaxis es así:
JSON_EXTRACT(json_doc, path[, path] ...)
Donde json_doc
es el documento JSON y path
es la ruta al valor a devolver.
Si es posible que esos argumentos puedan devolver varios valores, los valores coincidentes se ajustan automáticamente como una matriz, en el orden correspondiente a las rutas que los generaron.
Ejemplo 1:uso básico
Aquí hay un ejemplo para demostrarlo.
SELECT JSON_EXTRACT('{"a": 1, "b": 2, "c": 3}', '$.b') AS 'Result';
Resultado:
+--------+ | Result | +--------+ | 2 | +--------+
En este caso, devolvimos el valor de la clave b
.
Aquí hay otro ejemplo:
SELECT JSON_EXTRACT('{"Name": "Bart", "Age": 10}', '$.Name') AS 'Result';
Resultado:
+--------+ | Result | +--------+ | "Bart" | +--------+
Ejemplo 2:ruta inexistente
Si especifica una ruta que no existe, se devuelve un valor NULL.
SELECT JSON_EXTRACT('{"Name": "Homer", "Age": 39}', '$.Gender') AS 'Result';
Resultado:
+--------+ | Result | +--------+ | NULL | +--------+
También obtendrá un valor NULL si alguno de los argumentos es NULL
.
Ejemplo 3:matrices
Aquí hay un ejemplo usando una matriz.
SELECT JSON_EXTRACT('[1, 2, 3]', '$[2]') AS 'Result';
Resultado:
+--------+ | Result | +--------+ | 3 | +--------+
Las matrices usan numeración basada en cero, por lo que en este caso, se reemplaza el tercer elemento.
Aquí hay otro ejemplo de matriz. Esta vez devolvemos un valor de una matriz anidada.
SELECT JSON_EXTRACT('[1, 2, [3, 4, 5]]', '$[2][1]') AS 'Result';
Resultado:
+--------+ | Result | +--------+ | 4 | +--------+
Ejemplo 4:rutas múltiples
Puede especificar más de una ruta para devolver datos desde varios lugares dentro del documento JSON.
Ejemplo básico:
SELECT JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[1]', '$[3]') AS 'Result';
Resultado:
+--------+ | Result | +--------+ | [2, 4] | +--------+
Ejemplo 5:un documento JSON más grande
Aquí hay un ejemplo con un documento JSON un poco más grande.
SET @data = '{ "Person": { "Name": "Homer", "Age": 39, "Hobbies": ["Eating", "Sleeping"] } }'; SELECT JSON_EXTRACT(@data, '$.Person.Name', '$.Person.Age', '$.Person.Hobbies') AS 'Result';
Resultado:
+---------------------------------------+ | Result | +---------------------------------------+ | ["Homer", 39, ["Eating", "Sleeping"]] | +---------------------------------------+
También podemos elegir un elemento específico de la matriz si es necesario:
SET @data = '{ "Person": { "Name": "Homer", "Age": 39, "Hobbies": ["Eating", "Sleeping"] } }'; SELECT JSON_EXTRACT(@data, '$.Person.Name', '$.Person.Age', '$.Person.Hobbies[1]') AS 'Result';
Resultado:
+---------------------------+ | Result | +---------------------------+ | ["Homer", 39, "Sleeping"] | +---------------------------+