JSON 函数及语法糖
TiDB 支持 MySQL 5.7 GA 版本发布的大多数 JSON 函数。MySQL 5.7 发布后,又增加了更多 JSON 函数,TiDB 并未支持所有这些函数(参见未支持的函数)。
创建 JSON 值的函数
函数及语法糖 | 功能描述 |
---|---|
JSON_ARRAY([val[,val]…]) | 根据一系列元素创建一个JSON文档 |
JSON_OBJECT(key,val[,key,val]…) | 根据一系列K/V对创建一个JSON文档 |
JSON_QUOTE(string) | 返回一个字符串,该字符串为带引号的JSON值 |
搜索 JSON 值的函数
函数及语法糖 | 功能描述 |
---|---|
JSON_CONTAINS(target,candidate[,path]) | 通过返回1或0来表示目标JSON文档中是否包含给定的candidateJSON文档 |
JSON_CONTAINS_PATH(json_doc,one_or_all,path[,path]…) | 通过返回0或1来表示一个JSON文档在给定路径是否包含数据 |
JSON_EXTRACT(json_doc,path[,path]…) | 从JSON文档中解出某一路径对应的子文档 |
-> | 返回执行路径后面的JSON列的值;JSON_EXTRACT(doc,path_literal)的语法糖 |
->> | 返回执行路径后面的JSON列的值和转义后的结果;JSON_UNQUOTE(JSON_EXTRACT(doc,path_literal))的语法糖 |
JSON_KEYS(json_doc[,path]) | 返回从JSON对象的顶级值作为JSONarray的键,如果给定了路径参数,则从选定路径中获取顶级键 |
修改 JSON 值的函数
函数及语法糖 | 功能描述 |
---|---|
JSON_INSERT(json_doc,path,val[,path,val]…) | 在JSON文档中在某一路径下插入子文档 |
JSON_MERGE(json_doc,json_doc[,json_doc]…) | 已废弃的JSON_MERGE_PRESERVE别名 |
JSON_MERGE_PRESERVE(json_doc,json_doc[,json_doc]…) | 将两个或多个JSON文档合并成一个文档,并返回合并结果 |
JSON_REMOVE(json_doc,path[,path]…) | 移除JSON文档中某一路径下的子文档 |
JSON_REPLACE(json_doc,path,val[,path,val]…) | 替换JSON文档中的某一路径下的子文档 |
JSON_SET(json_doc,path,val[,path,val]…) | 在JSON文档中为某一路径设置子文档 |
JSON_UNQUOTE(json_val) | 去掉JSON值外面的引号,返回结果为字符串 |
返回 JSON 值属性的函数
函数及语法糖 | 功能描述 |
---|---|
JSON_DEPTH(json_doc) | 返回JSON文档的最大深度 |
JSON_LENGTH(json_doc[,path]) | 返回JSON文档的长度;如果路径参数已定,则返回该路径下值的长度 |
JSON_TYPE(json_val) | 检查某JSON文档内部内容的类型 |
未支持的函数
TiDB 暂未支持以下 JSON 函数。相关进展参见 TiDB #7546:
JSON_APPEND
及其别名JSON_ARRAY_APPEND
JSON_ARRAY_INSERT
JSON_DEPTH
JSON_MERGE_PATCH
JSON_PRETTY
JSON_SEARCH
JSON_STORAGE_SIZE
JSON_VALID
JSON_ARRAYAGG
JSON_OBJECTAGG
看完两件小事
如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:
- 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
- 关注公众号 「方志朋」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程