前言
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的计算,尽可能的把业务计算放到业务代码中取实现。如果你觉得我的文章写的不错,欢迎点赞,留言,赞赏。