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.