暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL中JSON使用

Java时间屋 2021-05-19
618

前言

Mysql在5.7.8开始对json原生支持,本篇文章对mysql中使用json进行些简单的总结,希望能帮助到使用的朋友。

参考:https://blog.csdn.net/weixin_44377973/article/details/107829700?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-0&spm=1001.2101.3001.4242

1.创建表和插入数据:

 CREATE TABLE tb_base_info (
id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT,
content JSON
);
INSERT INTO tb_base_info (content)
VALUES
(
'{"author": "Captain&D", "blog": "https://www.cnblogs.com/captainad"}'
);

复制

2.查询json中的使用字段:

其中->>为去掉查询的值的双引号,->为带着双引号。其中:$:表示当前正在使用的JSON文档,.keyName:JSON对象中键名为 keyName 的值,.*:表示 JSON 对象中的所有 value

SELECT  content ->> '$.blog' FROM tb_base_info


复制

当然json字段属性也是支持过滤的:

 WHERE student->'$.id' in (1,5)

复制
WHERE student->'$.id' = 1 or student->'$.id' = 5;

复制

like使用查询:

 where contact ->> '$.QQ' like '25%';

复制

如果存储的是数组的话可以支持索引查询:

SELECT  content ->> '$[0]' FROM tb_base_info


复制

3.json科普:

json的语法规则:

1)数据为键值对存储key:val
2)数据由逗号分隔;
3)大括号保存对象;
4)中括号保存数组。

复制

json数字可以是整型或者浮点型。

json对象可以包含多个键值对。

json还可以是数组的格式,[{},{}]。

json逻辑值:{ "flag":true } json可以设置为null:{ "note":null } 但是在java中使用fastjson可能会过滤掉为null的值。

4.mysql中操作json的函数:

4.1 JSON_ARRAY:生成json数组。

JSON_ARRAY(val1,val2,val3...)

复制

4.2 JSON_OBJECT:生成对象。

JSON_ARRAY(val1,val2,val3...)

复制

4.3 JSON_CONTAINS:查询指定数据是否存在。

JSON_CONTAINS(json_doc, val[, path])

复制

举例:

select name from student where json_contains(contact,'"15037334666"','$.phone');

复制

结果说明:包含则返回1,否则返回0。如果参数为 NULL 或 path 不存在,则返回NULL

4.4 JSON_CONTAINS_PATH:查询指定路径是否存在。

JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...)


复制

举例:

select id,name,json_contains_path(contact,'one','$.phone') from student;

复制

说明:存在则返回1,否则返回0。one_or_all 只能取值 “one” 或 “all”,one 表示只要有一个存在即可,all表示所有的都存在才行

4.5 JSON_EXTRACT:查找指定的数据:

语法:

JSON_EXTRACT(json_doc, path[, path] ...)

复制

举例:

select id,name,json_extract(contact,'$.QQ') QQ from student;
select id,name,json_extract(contact,'$.QQ','$.wechart') contact from student;

复制

备注:如果抽取出多个path,则返回的数据生成一个 json array

4.6 获取json中所有的keys:

JSON_KEYS(json_doc[, path])

复制

举例:

select id,name,json_keys(contact) contact from student;

复制

4.7 JSON_UNQUOTE:去掉 json 值的引号"

JSON_UNQUOTE(val)

复制

举例:

select id,name,json_unquote(json_extract(contact,'$.QQ')) QQ from student;

复制

总结

当然mysql中还有其他未使用的json函数,但是可能并不会很常用,因为mysql的计算能力很差,在真正的开发中我们还是要尽量的减少mysql的计算,尽可能的把业务计算放到业务代码中取实现。如果你觉得我的文章写的不错,欢迎点赞,留言,赞赏。


文章转载自Java时间屋,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论