sql >> Base de Datos >  >> RDS >> Mysql

JSON_EXTRACT():devuelve datos de un documento JSON en MySQL

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"] |
+---------------------------+