跳到主要内容
版本:Candidate-4.0

json_contains

检查一个 JSON 文档是否包含特定的值或子文档。如果目标 JSON 文档包含候选 JSON 值,JSON_CONTAINS 函数返回 1。否则,JSON_CONTAINS 函数返回 0

提示

所有的 JSON 函数和操作符都列在导航栏和概述页面上。

语法

json_contains(json_target, json_candidate)

参数

  • json_target:表示目标 JSON 文档的表达式。该文档可以是一个 JSON 列,或是由 JSON 构造函数如 PARSE_JSON 生成的 JSON 对象。

  • json_candidate:表示要在目标中搜索的候选 JSON 值或子文档的表达式。该值可以是一个 JSON 列,或是由 JSON 构造函数如 PARSE_JSON 生成的 JSON 对象。

返回值

返回一个 BOOLEAN 值。

使用说明

  • 对于标量值(字符串、数字、布尔值、null),如果值相等则函数返回 true。
  • 对于 JSON 对象,如果目标对象包含候选对象的所有键值对,则函数返回 true。
  • 对于 JSON 数组,如果目标数组包含候选数组的所有元素,或者候选是包含在目标数组中的单个值,则函数返回 true。
  • 该函数对嵌套结构执行深度包含检查。

示例

示例 1:检查 JSON 对象是否包含特定的键值对。

mysql> SELECT json_contains(PARSE_JSON('{"a": 1, "b": 2}'), PARSE_JSON('{"a": 1}'));

-> 1

示例 2:检查 JSON 对象是否包含不存在的键值对。

mysql> SELECT json_contains(PARSE_JSON('{"a": 1, "b": 2}'), PARSE_JSON('{"c": 3}'));

-> 0

示例 3:检查 JSON 数组是否包含特定元素。

mysql> SELECT json_contains(PARSE_JSON('[1, 2, 3, 4]'), PARSE_JSON('[2, 3]'));

-> 1

示例 4:检查 JSON 数组是否包含单个标量值。

mysql> SELECT json_contains(PARSE_JSON('[1, 2, 3, 4]'), PARSE_JSON('2'));

-> 1

示例 5:检查 JSON 数组是否包含不存在的元素。

mysql> SELECT json_contains(PARSE_JSON('[1, 2, 3, 4]'), PARSE_JSON('[5, 6]'));

-> 0

示例 6:检查嵌套 JSON 结构的包含关系。

mysql> SELECT json_contains(PARSE_JSON('{"users": [{"id": 1, "name": "John"}, {"id": 2, "name": "Jane"}]}'), 
PARSE_JSON('{"users": [{"id": 1}]}'));

-> 0

注意:在最后一个示例中,结果是 0,因为数组包含需要精确的元素匹配,而不是数组内对象的部分匹配。