在 MySQL 里,JSON_CONTAINS 方法是可以用于多维 JSON 数据的,不过使用时要依据具体的场景与需求,采用不同的处理方式。下面为你详细介绍相关内容。

基本语法

JSON_CONTAINS(target, candidate[, path])

  • target:需要被检查的 JSON 文档。
  • candidate:要查找的 JSON 值。
  • path:可选参数,指定在 target 中进行查找的路径。

示例说明

1、单维 JSON 数组

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
-- 创建示例表
CREATE TABLE test_table (
    id INT AUTO_INCREMENT PRIMARY KEY,
    json_data JSON
);

-- 插入示例数据
INSERT INTO test_table (json_data) VALUES ('["apple", "banana", "cherry"]');

-- 查询包含 "banana" 的记录
SELECT * FROM test_table WHERE JSON_CONTAINS(json_data, '"banana"');

在这个例子中,json_data 是单维 JSON 数组,JSON_CONTAINS 直接查找其中是否包含 "banana"

2、多维 JSON 数组

1
2
3
4
5
-- 插入多维 JSON 数组数据
INSERT INTO test_table (json_data) VALUES ('[["apple", "banana"], ["cherry", "date"]]');

-- 查询包含 "cherry" 的记录
SELECT * FROM test_table WHERE JSON_CONTAINS(json_data, '"cherry"');

这里的 json_data 是多维 JSON 数组,JSON_CONTAINS 会递归查找整个 JSON 结构,判断是否包含 "cherry"

3、JSON 对象嵌套数组

1
2
3
4
5
-- 插入 JSON 对象嵌套数组的数据
INSERT INTO test_table (json_data) VALUES ('{"fruits": ["apple", "banana"], "vegetables": ["carrot", "tomato"]}');

-- 查询包含 "carrot" 的记录
SELECT * FROM test_table WHERE JSON_CONTAINS(json_data, '"carrot"', '$.vegetables');

在这个例子中,json_data 是 JSON 对象嵌套数组,使用 path 参数 $.vegetables 来指定在 vegetables 数组中查找 "carrot"

注意事项

  • JSON_CONTAINS 查找的是完整的 JSON 值,若要进行模糊匹配,此方法并不适用。
  • 对于大型的多维 JSON 数据,频繁使用 JSON_CONTAINS 可能会影响查询性能,你可以考虑对 JSON 数据进行预处理,或者使用其他更高效的索引策略。