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_jsonJSON_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