MySQL数据类型 - JSON数据类型 (3)

最右边的数组元素。MySQL支持last关键字,作为数组中最后一个元素的索引的同义词。last - N 形式的表达式可用于相对寻址和范围定义,如下所示:
MySQL数据类型 - JSON数据类型 (3)

如果不是针对数组计算路径,则求值结果与将该值包装在单个元素数组中的结果相同:

MySQL数据类型 - JSON数据类型 (3)

可以使用带有JSON列标识符和JSON路径表达式 column->path 的形式,用作JSON_EXTRACT(column, path)的同义词。

有些函数获取现有的JSON文档,以某种方式对其进行修改,然后返回修改后的文档。路径表达式指示文档中要进行更改的位置。例如,JSON_SET()、JSON_INSERT()和JSON_REPLACE()函数都接受一个JSON文档,外加一个或多个成对儿的路径值,这些路径值描述了在何处修改文档以及要改成什么值。这些函数在处理文档中现有值和不存在值的方式上有所不同。

考虑一下这个文件:

MySQL数据类型 - JSON数据类型 (3)

JSON_SET()替换已存在路径的值,并为不存在的路径添加值:

MySQL数据类型 - JSON数据类型 (3)

在本例中,路径$[1].b[0]选择一个现有值(true),该值将替换为路径参数(1)后面的值。路径$[2][2]不存在,因此相应的值(2)将添加到由$[2]选择的值中。

JSON_INSERT()添加新值,但不替换现有值:
MySQL数据类型 - JSON数据类型 (3)

JSON_REPLACE() 替换现有值并忽略新值:

MySQL数据类型 - JSON数据类型 (3)
成对儿路径值从左到右计算。通过计算一对儿路径值生成文档,这个文档又成为下一对路径值计算的基础。

JSON_REMOVE()接受一个JSON文档和一个或多个指定要从文档中删除的值的路径。返回值为原始文档减去文档中存在的路径选择的值:
MySQL数据类型 - JSON数据类型 (3)

路径具有以下效果:

●$[2]匹配[10,20]并将其删除。

●$[1].b[1]的第一个实例在b元素中匹配false并将其删除。

●$[1].b[1]的第二个实例与任何内容都不匹配:该元素已被删除,路径不再存在,所以不起作用。

JSON路径语法

MySQL支持的许多JSON函数需要一个路径表达式来标识JSON文档中的特定元素。路径由路径的范围和一个或多个路径分支组成。对于MySQL JSON函数中使用的路径,范围始终是要搜索或以其他方式操作的文档,用前导的$字符表示。路径分支由句点字符(.)分隔。数组中的成员用[N]表示,其中N是非负整数。键的名称必须是带有双引号的字符串或有效的ECMAScript标识符(请参阅ECMAScript语言规范中的标识符名称和标识符)。路径表达式,就像JSON文本,应使用ascii、utf8或utf8mb4字符集进行编码。其他字符编码被隐式强制为utf8mb4。完整的语法如下所示:

MySQL数据类型 - JSON数据类型 (3)

如前所述,在MySQL中,路径的范围一直是被操作的文档,用$表示。可以在JSON路径表达式中将‘$‘当作文档的同义词。

通配符 * 和 **标记的用法如下:

●. * 表示对象中所有成员的值。

●[ * ] 表示数组中所有成员的值。

●[prefix]suffix表示以prefix开头、以suffix结尾的所有路径。prefix是可选的,suffix是必需的;换句话说,路径不能以结尾。

另外,路径不能包含序列***。

有关路径语法示例,请参考将路径作为参数的各种JSON函数的说明,例如JSON_CONTAINS_PATH()、JSON_SET()和JSON_REPLACE()。有关使用*和**通配符的示例,请参阅JSON_SEARCH()函数的说明。

MySQL 8.0.2及更高版本还支持JSON数组使用 to 关键字获得子集(例如 $[2 to 10]),last关键字作为数组最右边元素同义词这些范围表示法。

官方文档地址:
https://dev.mysql.com/doc/refman/8.0/en/json.html

MySQL数据类型 - JSON数据类型 (3)

上一篇:Linux下彻底卸载mysql


下一篇:BZOJ3888 [Usaco2015 Jan]Stampede