JSON_CONTAINS
描述
该函数用于检验指定 JSON 文档是否包含在目标 JSON 文档中,或者是否在目标文档的指定路径上找到指定元素(如果提供了 path 参数)。如果指定 JSON 文档包含在目标 JSON 文档中,该函数返回 1,否则返回 0。
如果只需要检查指定路径中是否存在数据,请使用 JSON_CONTAINS_PATH() 代替。
语法
JSON_CONTAINS(target, candidate[, path])
说明
参数 candidate 用于指定 JSON 文档,参数 target 表示目标 JSON 文档。
如果任意参数为 NULL,或者 path 参数未被识别为目标文档的一部分,则返回 NULL。
以下情况都会发生报错:
-
candidate或target参数不是有效的 JSON 文档。 -
path参数不是有效的路径表达式。 -
path参数包含 * 或 ** 通配符。
该函数遵循以下的规则:
-
单个元素相等的前提是两个标量值的 JSON_TYPE() 相同,并且可以进行比较。如果是数值类型,可以直接进行比较。
-
对于数组,当且仅当
candidate数组的所有元素都包含在target数组中时,candidate数组才包含在target数组中。 -
对于对象,当且仅当
candidate对象的所有key都需要包含在target对象中,而且每个key对应的value也要和目标对象对应的key相同时,candidate对象才包含在target对象中。
示例
SET @jn = '{"a": 1, "b": 2, "c": {"d": 4}}';
Query OK, 0 rows affected (0.000 sec)
SET @jn2 = '1';
Query OK, 0 rows affected (0.000 sec)
SELECT JSON_CONTAINS(@jn, @jn2, '$.a');
+---------------------------------+
| JSON_CONTAINS(@jn, @jn2, '$.a') |
+---------------------------------+
| 1 |
+---------------------------------+
1 row in set (0.001 sec)
SELECT JSON_CONTAINS(@jn, @jn2, '$.b');
+---------------------------------+
| JSON_CONTAINS(@jn, @jn2, '$.b') |
+---------------------------------+
| 0 |
+---------------------------------+
1 row in set (0.001 sec)
SET @jn2 = '{"d": 4}';
Query OK, 0 rows affected (0.000 sec)
SELECT JSON_CONTAINS(@jn, @jn2, '$.a');
+---------------------------------+
| JSON_CONTAINS(@jn, @jn2, '$.a') |
+---------------------------------+
| 0 |
+---------------------------------+
1 row in set (0.001 sec)
SELECT JSON_CONTAINS(@jn, @jn2, '$.c');
+---------------------------------+
| JSON_CONTAINS(@jn, @jn2, '$.c') |
+---------------------------------+
| 1 |
+---------------------------------+
1 row in set (0.001 sec)