mysql5.7 新增的json字段类型用法实例分析
本文实例讲述了mysql5.7新增的json字段类型用法。分享给大家供大家参考,具体如下:
一、我们先创建一个表,准备点数据
CREATETABLE`json_test`( `id`int(11)unsignedNOTNULLAUTO_INCREMENTCOMMENT'ID', `json`jsonDEFAULTNULLCOMMENT'json数据', PRIMARYKEY(`id`) )ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;
二、检索json列的字段
通过使用->或->>运算符检索json列的字段
selectid,json->'$[0].items[0].name'fromjson_test;
selectid,json->>'$[0].items[0].name'fromjson_test;
使用->和->>的区别是结果用了引号包裹。
三、处理json的一些函数
JSON_PRETTY(json_val)以优雅的格式显示json值
selectid,JSON_PRETTY(json)fromjson_test\G;
JSON_CONTAINS(target,candidate[,path])判断给定的candidate是否包含在target中,如果指定了path,则在指定路径中进行查找。
注意,注意,注意,这里的candidate如果是数字,需要用单引号包裹,如果是字符串,单引号里再加上双引号包裹。
selectJSON_CONTAINS(json->'$[0].name','"1号篮子"')fromjson_test; selectJSON_CONTAINS(json,'"1号篮子"','$[0].name')fromjson_test;
JSON_CONTAINS_PATH(json_doc,one_or_all,path[,path]...) 判断json_doc中的路径是否存在,通俗点说就是json中的key是否存在
selectJSON_CONTAINS_PATH(json,'one','$[0].name','$[0].test')fromjson_test;
第二个参数'one'表示只要有一个key存在就返回1,否则为0
selectJSON_CONTAINS_PATH(json,'all','$[0].name','$[0].test')fromjson_test;
第二个参数'all'表示所有key存在才返回1,否则为0
JSON_SET(json_doc,path,val[,path,val]...) 插入或更新数据并返回结果
selectJSON_SET(json,'$[0].name','2号篮子','$[0].test','test')fromjson_test;
我们修改$[0].name的值,并添加一个key为test,值为test的项
JSON_INSERT(json_doc,path,val[,path,val]...) 插入数据并返回结果,但不替换现有值。
selectJSON_INSERT(json,'$[0].name','2号篮子','$[0].exts','扩展')fromjson_test;
这时$[0].name不会被更新,只会新增一个字段$[0].exts
JSON_REPLACE(json_doc,path,val[,path,val]...)替换现有值并返回结果
selectJSON_REPLACE(json,'$[0].name','替换')fromjson_test;
将$[0].name中的值替换成新值
JSON_REMOVE(json_doc,path[,path]...) 删除数据并返回结果
selectJSON_REMOVE(json,'$[0].name')fromjson_test;
删除$[0].name这项数据
JSON_KEYS(json_doc[,path])获取json文档中的所有键
selectJSON_KEYS(json,'$[0]')fromjson_test;
获取$[0]路径下的所有键
JSON_LENGTH(json_doc[,path])获取json文档的长度
selectJSON_LENGTH(json,'$[0]')fromjson_test;
获取$[0]下的元素数量
JSON_EXTRACT(json_doc,path[,path]...) 返回json文档中的数据
selectJSON_EXTRACT(json,'$[0]')fromjson_test; selectJSON_EXTRACT(json,'$[0].name')fromjson_test;
返回json文档指定路径下的数据
JSON_ARRAY([val[,val]...]) 创建json数组
selectJSON_ARRAY(1,'2',true,5.6,null,now());
JSON_OBJECT([key,val[,key,val]...])通过键值对,创建json对象
selectJSON_OBJECT('name','xiaoxu','age',28,'height',1.72);
注意,这里键和值要成对出现
JSON_MERGE_PATCH(json_doc,json_doc[,json_doc]...) 合并json文档,如果有重复键,后面的数据覆盖前面的
selectJSON_MERGE_PATCH('{"name":"test1"}','{"name":"test2"}');
JSON_MERGE_PRESERVE(json_doc,json_doc[,json_doc]...) 合并json文档,如果有重复键,则会通过数组把值都保存起来
selectJSON_MERGE_PRESERVE('{"name":"test1"}','{"name":"test2"}');
JSON_QUOTE(string) 通过用双引号字符包裹并转义内部引号和其他字符
selectJSON_QUOTE('你好"世界"');
JSON_UNQUOTE(json_val) 将转义字符转换回普通字符
selectJSON_UNQUOTE('你好\\t\"世界\"');
更多关于MySQL相关内容感兴趣的读者可查看本站专题:《MySQL查询技巧大全》、《MySQL常用函数大汇总》、《MySQL日志操作技巧大全》、《MySQL事务操作技巧汇总》、《MySQL存储过程技巧大全》及《MySQL数据库锁相关技巧汇总》
希望本文所述对大家MySQL数据库计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。