10.9 预览特性:JSON 路径表达式和 JSON_OVERLAPS()

MariaDB 10.9 预览版本引入了 MySQL 兼容的语法扩展:范围表示法。在 JSON 路径表达式 中添加了“last”关键字,这是 MDEV-22224MDEV-27911 中要求的。此外,现在也支持负索引。范围表示法(使用“to”关键字实现)和“last”关键字本质上是数组元素选择器。

语法:

范围表示法
[M to N] 选择从索引 M 到 N 的元素范围。
last 关键字
[last-N] / [last] 分别选择倒数第 N 个元素和最后一个元素。
负索引
[-N] 选择从末尾数第 N 个元素。

SET @json= '[
             [1, {"key1": "value1"}, 3],
             [false, 5, 6],
             [7, 8, [9, {"key2": 2}, 11]],
             [15, 1.34, [14], ["string1", [16, {"key1":[1,2,3,[4,5,6]]}, 18]]],
             [19, 20],
             21, 22
            ]';
SELECT JSON_EXTRACT(@json, '$[0 to last-3][-2]') AS selected_elements;
+-------------------------------------+
| selected_elements                   |
+-------------------------------------+
| [{"key1": "value1"}, 5, 8, [14]]    |
+-------------------------------------+

JSON_OVERLAPS() (MDEV-27677) 是另一个为兼容 MySQL 而添加的函数。它比较两个 JSON 文档,如果两个 JSON 文档之间满足以下任一条件,则返回 true:
1) 两个对象之间至少有一个共同的键值对
2) 两个数组之间至少有一个共同的数组元素。
如果将对象作为 JSON 数组的元素进行比较,则两个对象应该完全匹配。
3) 如果其中一个 JSON 文档是标量,另一个是数组,则该标量应与数组中的一个元素具有相同的值和类型。
如果以上条件均不满足,则返回 false。部分匹配被视为不匹配。

示例
SELECT JSON_OVERLAPS('{"A": 1, "B": {"key1":"value1"}}', '{"A": 2, "B": {"key1":"value1"}}') AS is_overlap;
+---------------------+
| is_overlap          |
+---------------------+
| 1                   |
+---------------------+

SELECT JSON_OVERLAPS('[1, 2, true, false, null]', '[3, 4, [1]]') AS is_overlap;
+--------------------- +
| is_overlap           |
+----------------------+
| 0                    |
+----------------------+

下载新的 mariadb-10.9.0-mdev-27911-json 预览版本请点击此处

欢迎反馈

如果您在此功能预览中遇到任何问题,无论是在设计方面,还是存在未按预期工作的边缘情况,请通过 JIRA 在 MDEV 项目中提交请求告知我们。欢迎您在 Zulip 上参与讨论。