MySQL JSON_CONTAINS() 函数使用指南
MySQL JSON_CONTAINS()
函数检查一个 JSON 文档中是否包含另一个 JSON 文档。
如果您需要检查 JSON 文档中指定的路径下的是否存在数据,请使用 JSON_CONTAINS_PATH()
函数。
JSON_CONTAINS()
语法
这里是 MySQL JSON_CONTAINS()
的语法:
JSON_CONTAINS(target_json, candidate_json)
JSON_CONTAINS(target_json, candidate_json, path)
参数
target_json
- 必需的。一个 JSON 文档。
candidate_json
- 必需的。被包含的 JSON 文档。
path
- 可选的。一个路径表达式。
返回值
如果在 JSON 文档 target_json
中包含了 JSON 文档 candidate_json
,JSON_CONTAINS()
函数将返回 1
,否则返回 0
。如果提供了 path
参数,则检查由 path
匹配的部分是否包含 candidate_json
JSON 文档。
如果存在以下的情况, JSON_CONTAINS()
函数将返回 NULL
:
- 如果 JSON 文档中不存在指定的路径。
- 如果任意一个参数为
NULL
。
JSON_CONTAINS()
函数将在以下情况下返回错误:
- 如果参数
json
不是有效的 JSON 文档,MySQL 将会给出错误。您可以使用JSON_VALID()
验证 JSON 文档的有效性。 - 如果参数
path
不是有效的路径表达式, MySQL 将会给出错误。
JSON_CONTAINS()
示例
这里列出了几个常见的 JSON_CONTAINS()
用法示例。
示例: 数组
SELECT
JSON_CONTAINS('[1, 2, {"x": 3}]', '1') as `1`,
JSON_CONTAINS('[1, 2, {"x": 3}]', '{"x": 3}') as `{"x": 3}`,
JSON_CONTAINS('[1, 2, {"x": 3}]', '3') as `3`;
+------+----------+------+
| 1 | {"x": 3} | 3 |
+------+----------+------+
| 1 | 1 | 0 |
+------+----------+------+
示例: 指定路径
SELECT
JSON_CONTAINS('[1, 2, [3, 4]]', '2'),
JSON_CONTAINS('[1, 2, [3, 4]]', '2', '$[2]');
+--------------------------------------+----------------------------------------------+
| JSON_CONTAINS('[1, 2, [3, 4]]', '2') | JSON_CONTAINS('[1, 2, [3, 4]]', '2', '$[2]') |
+--------------------------------------+----------------------------------------------+
| 1 | 0 |
+--------------------------------------+----------------------------------------------+
这里,我们已经在 JSON_CONTAINS('[1, 2, [3, 4]]', '2', '$[2]')
指定了路径表达式 $[2]
,其匹配的内容是 [3, 4]
。 [3, 4]
中没有包含 2
, 因此,它返回了 0
。