31.MySQL中JSON使用

文章目录

前言

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

展开阅读全文

页面更新:2024-03-15

标签:浮点   可能会   引号   括号   数组   字段   前言   语法   路径   函数   对象   操作   业务   数据   文章   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top