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_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"世界"');
(编辑:淮北站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |