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

Ejemplos de JSON_CONTAINS_PATH() en MySQL

En MySQL, el JSON_CONTAINS_PATH() La función comprueba si se encuentra o no una ruta específica en el documento JSON dado.

Si se encuentra la ruta, JSON_CONTAINS_PATH() devuelve 1 , de lo contrario devuelve 0 .

Sintaxis

La sintaxis es así:

JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...)

Donde json_doc es el documento JSON, one_or_all es la palabra clave one o all (para indicar si solo debe existir una ruta o deben existir todas las rutas antes de devolver 1 ) y path es la ruta real.

Ejemplo 1:uso básico

Aquí hay un ejemplo para demostrar el uso básico.

SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}';
SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.a') AS Result;

Resultado:

+--------+
| Result |
+--------+
|      1 |
+--------+

La ruta $.a existe en el documento JSON y, por lo tanto, el resultado es 1 . Usamos one como segundo argumento, pero en este caso obtendríamos el mismo resultado si hubiésemos especificado all .

SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}';
SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.a') AS Result;

Resultado:

+--------+
| Result |
+--------+
|      1 |
+--------+

Si especificamos una ruta que no existe obtenemos 0 . Ejemplo:

SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}';
SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.z') AS Result;

Resultado:

+--------+
| Result |
+--------+
|      0 |
+--------+

Ejemplo 2:rutas múltiples

En los siguientes ejemplos, especificamos dos rutas.

En el primer ejemplo, existe un camino pero el otro no. Pero porque uso one como segundo argumento, el resultado es positivo (porque al menos uno de los caminos existe).

SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}';
SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.a', '$.z') AS Result;

Resultado:

+--------+
| Result |
+--------+
|      1 |
+--------+

Si cambiamos one a all obtenemos un resultado negativo.

SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}';
SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.a', '$.z') AS Result;

Resultado:

+--------+
| Result |
+--------+
|      0 |
+--------+

Esto se debe a que all La palabra clave requiere que todas las rutas existan en el documento JSON antes de que devuelva un 1 .

Ejemplo 3:notación de puntos

Puede usar la notación de puntos para indicar rutas específicas dentro del documento JSON.

SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}';
SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c.d') AS Result;

Resultado:

+--------+
| Result |
+--------+
|      1 |
+--------+

Ejemplo 4:matrices

Aquí hay un par de ejemplos de matrices.

El primer ejemplo devuelve un resultado positivo.

SET @doc = '{"a": 1, "b": 2, "c": [3, 4, 5]}';
SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c[0]') AS Result;

Resultado:

+--------+
| Result |
+--------+
|      1 |
+--------+

El siguiente ejemplo devuelve un resultado negativo.

SET @doc = '{"a": 1, "b": 2, "c": [3, 4, 5]}';
SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c[3]') AS Result;

Resultado:

+--------+
| Result |
+--------+
|      0 |
+--------+

Esto devuelve negativo porque las matrices usan numeración basada en cero. Por lo tanto, la ruta $.c[3] representa el cuarto elemento, pero la matriz solo contiene tres elementos.