10.9 预览特性:JSON 路径表达式和 JSON_OVERLAPS()
MariaDB 10.9 预览版本引入了 MySQL 兼容的语法扩展:范围表示法。在 JSON 路径表达式 中添加了“last”关键字,这是 MDEV-22224 和 MDEV-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 预览版本请点击此处!