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