mysql 5.7开始支持新的特性json啦!!!!

tp框架里只有很简单的一点示例,没有办法,研究下mysql的原生写法吧。

从Navicat 中找出来了所有有关json的函数,英文大写字母看着太难受,自己改成了小写,如下:

json_set(json_doc, path, val[, path, val] ...) 将数据插入 JSON 文档
json_keys(json_doc[, path]) 来自 JSON 文档的键数组
json_type(json_val) JSON 值的类型
json_array([val[, val] ...]) 创建 JSON 数组
json_depth(json_doc) JSON 文档的最大深度
json_quote(string) 将json转成json字符串类型
json_valid(val) JSON 值是否有效
json_insert(json_doc, path, val[, path, val] ...) 将数据插入 JSON 文档
json_length(json_doc[, path]) JSON 文档中的元素数
json_object([key, val[, key, val] ...]) 创建 JSON 对象
json_pretty(json_val)
json_remove(json_doc, path[, path] ...) 移除指定路径的数据,如果某个路径不存在则略过此路径。如果有参数为NULL,则返回NULL。
json_search(json_doc, one_or_all, search_str[, escape_char[, path] ...]) 查询包含指定字符串的paths,并作为一个json array返回。如果有参数为NUL或path不存在,则返回NULL。
json_extract(json_doc, path[, path] ...) 从json文档里抽取数据。如果有参数有NULL或path不存在,则返回NULL。如果抽取出多个path,则返回的数据封闭在一个json array里。
json_replace(json_doc, path, val[, path, val] ...) 替换指定路径的数据,如果某个路径不存在则略过(存在才替换)。如果有参数为NULL,则返回NULL。
json_unquote(json_val) 去掉val的引号。如果val为NULL,则返回NULL。
json_contains(target, candidate[, path]) 查询json文档是否在指定path包含指定的数据,包含则返回1,否则返回0。如果有参数为NULL或path不存在,则返回NULL。
json_arrayagg(col_or_expr)
json_objectagg(key, value)
json_merge_patch(json_doc, json_doc[, json_doc] ...)
json_array_append(json_doc, path, val[, path, val] ...) 在指定path的json array尾部追加val。如果指定path是一个json object,则将其封装成一个json array再追加。如果有参数为NULL,则返回NULL。
json_array_insert(json_doc, path, val[, path, val] ...) 在path指定的json array元素插入val,原位置及以右的元素顺次右移。如果path指定的数据非json array元素,则略过此val;如果指定的元素下标超过json array的长度,则插入尾部。
json_storage_size(json_val)
json_contains_path(json_doc, one_or_all, path[, path] ...) 查询是否存在指定路径,存在则返回1,否则返回0。如果有参数为NULL,则返回NULL。
json_merge_reserve(json_doc, json_doc[, json_doc] ...)

1、json_set

如题,我们当前研究的是json一维数组,数据如下

 细心的小朋友一眼就看出来啦,没错,这是微信公众号粉丝。

废话不多说,直接上才艺

第一个函数json_array_append

update tp_wechat_users set tagid_list=json_array_append(tagid_list,'$',107) where id=1;

update tp_wechat_users set tagid_list=json_array_append(tagid_list,'$',108) where id=1;

 you know? 向json数组中插入一个值。

第二个:json_array_insert 

update tp_wechat_users set tagid_list=json_array_insert(tagid_list,'$[2]',102) where id=1;

 向数组的第三号位插入102,OK,就是这么简单,如果我们想在107和108之间插入101呢?

update tp_wechat_users set tagid_list=json_array_insert(tagid_list,'$[1]',101) where id=1;

 Yeah! we did it!

移除这里不是很开心,因为目前发现数组只能根据索引移除,如下

update tp_wechat_users set tagid_list=json_remove(tagid_list,'$[1]') where id=1;

 只能这样,好像没找到根据101这个值去移除,没办法,先凑合用吧。

哦对了,搜索

select tagid_list from tp_wechat_users where json_contains(tagid_list,'[102]')

 如图所示,所有tagid_list中带有102的就都能搜索到了。

暂时先记录这么多,先赶项目,等有时间再去深入研究。

资料来源:https://blog.csdn.net/jiangyu1013/article/details/78917425

原文地址:https://www.cnblogs.com/dayin1/p/15550315.html