JSON_CONTAINS_PATH()

JSON_CONTAINS_PATH(json, one_or_all, path…) 判断给定的 JSON 路径是否存在于文档中,根据模式返回“任一或全部路径存在”时的 1。

描述

JSON_CONTAINS_PATH(json, one_or_all, path [, path] ...) 返回 10,用于指示文档中是否存在指定的路径:

  • 使用 'one' 时,如果至少有一个路径存在,则返回 1

  • 使用 'all' 时,如果所有路径都存在,则返回 1

模式字符串不区分大小写。如果第一个参数不是有效 JSON,则返回错误。文档或模式为 SQL NULL 时返回 SQL NULL

路径按从左到右的顺序求值,并在结果确定后短路。'one' 模式下,前面的路径一旦命中,就直接返回 1,不再求值后续路径;'all' 模式下,前面的路径一旦不存在,就直接返回 0,不再求值后续路径。因此,结果已由前面的路径确定时,后续 SQL NULL 路径不会改变结果;如果在结果确定前求值到 SQL NULL 路径,则返回 SQL NULL。实际求值到无效 JSON 路径时会返回错误;如果前面的路径已经确定结果,后续无效路径不会被求值,也不会触发错误。

语法

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

参数

参数

说明

json

要判断的 JSON 文档。

one_or_all

取值 'one''all',控制是任一还是所有路径必须存在。

path

一个或多个要判断的 JSON 路径表达式。

返回值

根据请求的一个或多个路径是否存在,返回 10

示例

DROP DATABASE IF EXISTS json_contains_path_demo;
CREATE DATABASE json_contains_path_demo;
USE json_contains_path_demo;

SELECT JSON_CONTAINS_PATH('{"a":true,"b":[1,2]}', 'all', '$.a', '$.b') AS all_exist;
SELECT JSON_CONTAINS_PATH('{"a":true}', 'one', '$.a', '$.missing') AS one_exists;

CREATE TABLE t_json_contains_path (id INT, doc JSON);
INSERT INTO t_json_contains_path VALUES (1, '{"a":1,"b":[1,2]}'), (2, '{"a":null}');
SELECT id, JSON_CONTAINS_PATH(doc, 'all', '$.a', '$.b[1]') AS all_exist FROM t_json_contains_path ORDER BY id;

DROP DATABASE json_contains_path_demo;