如果不是针对数组计算路径,则求值结果与将该值包装在单个元素数组中的结果相同:
可以使用带有JSON列标识符和JSON路径表达式 column->path 的形式,用作JSON_EXTRACT(column, path)的同义词。
有些函数获取现有的JSON文档,以某种方式对其进行修改,然后返回修改后的文档。路径表达式指示文档中要进行更改的位置。例如,JSON_SET()、JSON_INSERT()和JSON_REPLACE()函数都接受一个JSON文档,外加一个或多个成对儿的路径值,这些路径值描述了在何处修改文档以及要改成什么值。这些函数在处理文档中现有值和不存在值的方式上有所不同。
考虑一下这个文件:
JSON_SET()替换已存在路径的值,并为不存在的路径添加值:
在本例中,路径$[1].b[0]选择一个现有值(true),该值将替换为路径参数(1)后面的值。路径$[2][2]不存在,因此相应的值(2)将添加到由$[2]选择的值中。
JSON_INSERT()添加新值,但不替换现有值:
JSON_REPLACE() 替换现有值并忽略新值:
成对儿路径值从左到右计算。通过计算一对儿路径值生成文档,这个文档又成为下一对路径值计算的基础。
JSON_REMOVE()接受一个JSON文档和一个或多个指定要从文档中删除的值的路径。返回值为原始文档减去文档中存在的路径选择的值:
路径具有以下效果:
●$[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路径表达式中将‘$‘当作文档的同义词。
通配符 * 和 **标记的用法如下:
●. * 表示对象中所有成员的值。
●[ * ] 表示数组中所有成员的值。
●[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
原文:https://blog.51cto.com/15023289/2560980