MySQL JSON_CONTAINS_PATH() 函数使用指南

MySQL JSON_CONTAINS_PATH() 函数检查一个 JSON 文档中在指定的路径上是否有值存在。

JSON_CONTAINS_PATH() 语法

这里是 MySQL JSON_CONTAINS_PATH() 的语法:

JSON_CONTAINS_PATH(json, one_or_all, path[, path])

参数

json
必需的。一个 JSON 文档。
one_or_all
必需的。可用值:'one', 'all'。它指示是否检查所有的路径。
path
必需的。您应该至少指定一个路径表达式。

返回值

如果 JSON 文档在指定的路径上有值,JSON_CONTAINS_PATH() 函数将返回 1,否则返回 0

JSON_CONTAINS_PATH() 根据 one_or_all 参数决定是否检查所有的路径:

  • 如果是 'one',且至少有一个路径上有值,JSON_CONTAINS_PATH() 函数将返回 1,否则返回 0
  • 如果是 'all',且所有的路径上有值,JSON_CONTAINS_PATH() 函数将返回 1,否则返回 0

如果任意一个参数为 NULLJSON_CONTAINS_PATH() 函数将返回 NULL

JSON_CONTAINS_PATH() 函数将在以下情况下返回错误:

  • 如果参数 json 不是有效的 JSON 文档,MySQL 将会给出错误。您可以使用 JSON_VALID() 验证 JSON 文档的有效性。
  • 如果参数 path 不是有效的路径表达式, MySQL 将会给出错误。

JSON_CONTAINS_PATH() 示例

这里列出了几个常见的 JSON_CONTAINS() 用法示例。

示例: 数组

SELECT
    JSON_CONTAINS_PATH('[1, 2, {"x": 3}]', 'all', '$[0]') as `$[0]`,
    JSON_CONTAINS_PATH('[1, 2, {"x": 3}]', 'all', '$[3]') as `$[3]`,
    JSON_CONTAINS_PATH('[1, 2, {"x": 3}]', 'all', '$[2].x') as `$[2].x`;
+------+------+--------+
| $[0] | $[3] | $[2].x |
+------+------+--------+
|    1 |    0 |      1 |
+------+------+--------+

示例: one vs all

SELECT
    JSON_CONTAINS_PATH('[1, 2, {"x": 3}]', 'one', '$[0]', '$[3]') as `one`,
    JSON_CONTAINS_PATH('[1, 2, {"x": 3}]', 'all', '$[0]', '$[3]') as `all`;
+------+------+
| one  | all  |
+------+------+
|    1 |    0 |
+------+------+