mysql5.7 新增的json字段类型

前端之家收集整理的这篇文章主要介绍了mysql5.7 新增的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;

 

二、检索json列的字段

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

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

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

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

 

三、处理json的一些函数

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

select id,JSON_PRETTY(json) from json_test\G;

 

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\"世界\"');

  

猜你在找的MySQL相关文章