加入收藏 | 设为首页 | 会员中心 | 我要投稿 淮北站长网 (https://www.0561zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql5.7 新增的json字段类型

发布时间:2021-01-08 07:03:44 所属栏目:MySql教程 来源:网络整理
导读:一、我们先创建一个表,准备点数据 CREATE TABLE `json_test` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',`json` json DEFAULT NULL COMMENT 'json数据',PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ? 二、检索json

一、我们先创建一个表,准备点数据

CREATE TABLE `json_test` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',`json` json DEFAULT NULL COMMENT 'json数据',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

mysql5.7 新增的json字段类型

?

二、检索json列的字段

通过使用 -> 或 ->> 运算符检索json列的字段

select id,json->'$[0].items[0].name' from json_test;

mysql5.7 新增的json字段类型

select id,json->>'$[0].items[0].name' from json_test;

mysql5.7 新增的json字段类型

使用 -> 和 ->> 的区别是结果用了引号包裹。

?

三、处理json的一些函数

JSON_PRETTY(json_val) 以优雅的格式显示json值

select id,JSON_PRETTY(json) from json_testG;

?

JSON_CONTAINS(target,candidate[,path]) 判断给定的candidate是否包含在target中,如果指定了path,则在指定路径中进行查找。

注意,注意,注意,这里的candidate如果是数字,需要用单引号包裹,如果是字符串,单引号里再加上双引号包裹。

select JSON_CONTAINS(json->'$[0].name','"1号篮子"') from json_test;
select JSON_CONTAINS(json,'"1号篮子"','$[0].name') from json_test;

?

JSON_CONTAINS_PATH(json_doc,one_or_all,path[,path] ...)? 判断json_doc中的路径是否存在,通俗点说就是json中的key是否存在

select JSON_CONTAINS_PATH(json,'one','$[0].name','$[0].test') from json_test;

第二个参数'one'表示只要有一个key存在就返回1,否则为0

select JSON_CONTAINS_PATH(json,'all','$[0].test') from json_test;

第二个参数'all'表示所有key存在才返回1,否则为0

?

JSON_SET(json_doc,path,val[,val] ...)?插入或更新数据并返回结果

select JSON_SET(json,'2号篮子','$[0].test','test') from json_test;

我们修改$[0].name的值,并添加一个key为test,值为test的项

?

JSON_INSERT(json_doc,val] ...)?插入数据并返回结果,但不替换现有值。

select JSON_INSERT(json,'$[0].exts','扩展') from json_test;

这时$[0].name不会被更新,只会新增一个字段$[0].exts

?

JSON_REPLACE(json_doc,val] ...) 替换现有值并返回结果

select JSON_REPLACE(json,'替换') from json_test;

将$[0].name中的值替换成新值

?

JSON_REMOVE(json_doc,path] ...)??删除数据并返回结果

select JSON_REMOVE(json,'$[0].name') from json_test;

删除$[0].name这项数据

?

JSON_KEYS(json_doc[,path]) 获取json文档中的所有键

select JSON_KEYS(json,'$[0]') from json_test;

获取$[0]路径下的所有键

?

JSON_LENGTH(json_doc[,path]) 获取json文档的长度

select JSON_LENGTH(json,'$[0]') from json_test;

获取$[0]下的元素数量

?

JSON_EXTRACT(json_doc,path] ...)? 返回json文档中的数据

select JSON_EXTRACT(json,'$[0]') from json_test;
select JSON_EXTRACT(json,'$[0].name') from json_test;

返回json文档指定路径下的数据

?

JSON_ARRAY([val[,val] ...])? 创建json数组

select JSON_ARRAY(1,'2',true,5.6,null,now());

  

JSON_OBJECT([key,key,val] ...]) 通过键值对, 创建json对象

select JSON_OBJECT('name','xiaoxu','age',28,'height',1.72);

注意,这里键和值要成对出现

?

JSON_MERGE_PATCH(json_doc,json_doc[,json_doc] ...)? 合并json文档,如果有重复键,后面的数据覆盖前面的

select JSON_MERGE_PATCH('{"name":"test1"}','{"name":"test2"}');

  

JSON_MERGE_PRESERVE(json_doc,json_doc] ...)? 合并json文档,如果有重复键,则会通过数组把值都保存起来

select JSON_MERGE_PRESERVE('{"name":"test1"}','{"name":"test2"}');

  

JSON_QUOTE(string)??通过用双引号字符包裹并转义内部引号和其他字符

select JSON_QUOTE('你好"世界"');

  

JSON_UNQUOTE(json_val)? 将转义字符转换回普通字符

select JSON_UNQUOTE('你好t"世界"');

  

(编辑:淮北站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读