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

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

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

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

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

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

考虑一下这个文件:数组

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

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

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

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

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

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

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

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

相关文章
相关标签/搜索