MySQL中JSON使用
文章目录
前言
1.创建表和插入数据:
2.查询json中的使用字段:
3.json科普:
4.mysql中操作json的函数:
4.1 JSON_ARRAY:生成json数组。
4.2 JSON_OBJECT:生成对象。
4.3 JSON_CONTAINS:查询指定数据是否存在。
4.4 JSON_CONTAINS_PATH:查询指定路径是否存在。
4.5 JSON_EXTRACT:查找指定的数据:
4.6 获取json中所有的keys:
4.7 JSON_UNQUOTE:去掉 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的计算,尽可能的把业务计算放到业务代码中取实现。