本节中的函数对JSON值执行搜索操作,以从其中提取数据,报告数据是否在其中的某个位置或报告其中的数据的路径。
JSON_CONTAINS(
target
, candidate
[, path
])
通过返回1或0指示给定的candidate
JSON文档是否包含在target
JSON文档中,或者(如果提供了path
参数)指示是否 在目标内的特定路径上找到候选对象。返回 NULL
是否有任何参数为 NULL
,或者path参数没有标识目标文档的一部分。如果发生错误 target
或 candidate
不是有效的JSON文档,或者如果path
参数不是一个有效的路径表达式或包含一个 *
或**
通配符。
要仅检查路径中是否存在任何数据,请 JSON_CONTAINS_PATH()
改用。
以下规则定义了围堵:
当且仅当候选标量可比较且相等时,才包含在目标标量中。如果两个标量值具有相同的JSON_TYPE()
类型,则它们是可比较的,但 类型的值INTEGER
和DECIMAL
也可彼此比较。
当且仅当候选对象中的每个元素都包含在目标的某个元素中时,候选数组才包含在目标数组中。
当且仅当候选非数组包含在目标的某些元素中时,该候选非数组才包含在目标数组中。
当且仅当候选对象中的每个关键字在目标中存在一个具有相同名称的关键字并且与候选关键字相关联的值包含在与目标关键字相关联的值中时,候选对象才包含在目标对象中。
否则,候选值将不包含在目标文档中。
mysql> SET @j = ‘{"a": 1, "b": 2, "c": {"d": 4}}‘;
mysql> SET @j2 = ‘1‘;
mysql> SELECT JSON_CONTAINS(@j, @j2, ‘$.a‘);
+-------------------------------+
| JSON_CONTAINS(@j, @j2, ‘$.a‘) |
+-------------------------------+
| 1 |
+-------------------------------+
mysql> SELECT JSON_CONTAINS(@j, @j2, ‘$.b‘);
+-------------------------------+
| JSON_CONTAINS(@j, @j2, ‘$.b‘) |
+-------------------------------+
| 0 |
+--------------------------