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 数据的表或列。