MariaDB JSON_CONTAINS_PATH() 函数的基础用法与实例

MariaDB JSON_CONTAINS_PATH() 函数是一个用于检查 JSON 文档中是否存在指定路径的函数。

发布于

MariaDB JSON_CONTAINS_PATH() 函数是一个用于检查 JSON 文档中是否存在指定路径的函数。它可以用于查询或过滤包含 JSON 数据的表或列。

语法

MariaDB JSON_CONTAINS_PATH() 函数的语法如下:

JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...)

其中:

  • json_doc 是一个有效的 JSON 文档,可以是一个字面值,一个变量,或者一个列名。
  • one_or_all 是一个字符串,用于指定是要检查所有的路径 ('all'),还是只要有一个路径存在就返回真 ('one')。
  • path 是一个或多个 JSON 路径表达式,用于指定要检查的路径。路径表达式的语法参见 JSON Path Expressions
  • 函数的返回值是一个布尔值,如果 json_doc 中存在所有或至少一个指定的路径,返回 1,否则返回 0

实例

检查 JSON 文档中是否存在指定的单个路径

假设我们有一个 JSON 文档,如下所示:

{
  "name": "Alice",
  "age": 25,
  "hobbies": ["reading", "swimming", "coding"]
}

我们可以使用 MariaDB JSON_CONTAINS_PATH() 函数来检查这个 JSON 文档中是否存在某个路径,例如:

SELECT JSON_CONTAINS_PATH(
  '{
    "name": "Alice",
    "age": 25,
    "hobbies": ["reading", "swimming", "coding"]
  }',
  'one',
  '$.name'
);

输出结果为:

1

这表示 JSON 文档中存在 $.name 这个路径,即 name 这个键。

如果我们检查一个不存在的路径,例如:

SELECT JSON_CONTAINS_PATH(
  '{
    "name": "Alice",
    "age": 25,
    "hobbies": ["reading", "swimming", "coding"]
  }',
  'one',
  '$.gender'
);

输出结果为:

0

这表示 JSON 文档中不存在 $.gender 这个路径,即 gender 这个键。

检查 JSON 文档中是否存在指定的多个路径

我们可以使用 MariaDB JSON_CONTAINS_PATH() 函数来检查 JSON 文档中是否存在多个路径,例如:

SELECT JSON_CONTAINS_PATH(
  '{
    "name": "Alice",
    "age": 25,
    "hobbies": ["reading", "swimming", "coding"]
  }',
  'one',
  '$.name',
  '$.age',
  '$.gender'
);

输出结果为:

1

这表示 JSON 文档中至少存在一个指定的路径,即 $.name$.age$.gender

如果我们将 one_or_all 参数改为 'all',则表示要求所有的路径都存在,例如:

SELECT JSON_CONTAINS_PATH(
  '{
    "name": "Alice",
    "age": 25,
    "hobbies": ["reading", "swimming", "coding"]
  }',
  'all',
  '$.name',
  '$.age',
  '$.gender'
);

输出结果为:

0

这表示 JSON 文档中不存在所有的指定的路径,即 $.name$.age$.gender

检查 JSON 文档中是否存在指定的数组元素

我们可以使用 MariaDB JSON_CONTAINS_PATH() 函数来检查 JSON 文档中是否存在指定的数组元素,例如:

SELECT JSON_CONTAINS_PATH(
  '{
    "name": "Alice",
    "age": 25,
    "hobbies": ["reading", "swimming", "coding"]
  }',
  'one',
  '$.hobbies[0]'
);

输出结果为:

1

这表示 JSON 文档中存在 $.hobbies[0] 这个路径,即 hobbies 数组的第一个元素。

如果我们检查一个不存在的数组元素,例如:

SELECT JSON_CONTAINS_PATH(
  '{
    "name": "Alice",
    "age": 25,
    "hobbies": ["reading", "swimming", "coding"]
  }',
  'one',
  '$.hobbies[3]'
);

输出结果为:

0

这表示 JSON 文档中不存在 $.hobbies[3] 这个路径,即 hobbies 数组的第四个元素。

检查 JSON 文档中是否存在指定的通配符路径

我们可以使用 MariaDB JSON_CONTAINS_PATH() 函数来检查 JSON 文档中是否存在指定的通配符路径,例如:

SELECT JSON_CONTAINS_PATH(
  '{
    "name": "Alice",
    "age": 25,
    "hobbies": ["reading", "swimming", "coding"]
  }',
  'one',
  '$.hobbies[*]'
);

输出结果为:

1

这表示 JSON 文档中存在 $.hobbies[*] 这个路径,即 hobbies 数组的任意一个元素。

如果我们检查一个不存在的通配符路径,例如:

SELECT JSON_CONTAINS_PATH(
  '{
    "name": "Alice",
    "age": 25,
    "hobbies": ["reading", "swimming", "coding"]
  }',
  'one',
  '$.friends[*]'
);

输出结果为:

0

这表示 JSON 文档中不存在 $.friends[*] 这个路径,即 friends 数组的任意一个元素。

检查 JSON 文档中是否存在指定的嵌套路径

我们可以使用 MariaDB JSON_CONTAINS_PATH() 函数来检查 JSON 文档中是否存在指定的嵌套路径,例如:

SELECT JSON_CONTAINS_PATH(
  '{
    "name": "Alice",
    "age": 25,
    "hobbies": ["reading", "swimming", "coding"],
    "address": {
      "city": "New York",
      "country": "USA"
    }
  }',
  'one',
  '$.address.city'
);

输出结果为:

1

这表示 JSON 文档中存在 $.address.city 这个路径,即 address 对象的 city 属性。

如果我们检查一个不存在的嵌套路径,例如:

SELECT JSON_CONTAINS_PATH(
  '{
    "name": "Alice",
    "age": 25,
    "hobbies": ["reading", "swimming", "coding"],
    "address": {
      "city": "New York",
      "country": "USA"
    }
  }',
  'one',
  '$.address.zipcode'
);

输出结果为:

0

这表示 JSON 文档中不存在 $.address.zipcode 这个路径,即 address 对象的 zipcode 属性。

相关函数

除了 MariaDB JSON_CONTAINS_PATH() 函数外,还有一些与 JSON 路径相关的函数,如下:

  • MariaDB JSON_CONTAINS() 函数:用于检查 JSON 文档中是否包含指定的值或子文档。
  • MariaDB JSON_EXTRACT() 函数:用于从 JSON 文档中提取指定路径的值。
  • MariaDB JSON_SEARCH() 函数:用于在 JSON 文档中搜索指定的值,并返回其路径。
  • MariaDB JSON_KEYS() 函数:用于返回 JSON 文档中指定路径的所有键。
  • MariaDB JSON_DEPTH() 函数:用于返回 JSON 文档中指定路径的深度。
  • MariaDB JSON_LENGTH() 函数:用于返回 JSON 文档中指定路径的长度。

结论

MariaDB JSON_CONTAINS_PATH() 函数是一个用于检查 JSON 文档中是否存在指定路径的函数。它可以用于查询或过滤包含 JSON 数据的表或列。