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

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].name', '$[0].test') from json_test;

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

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

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

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

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

select JSON_INSERT(json, '$[0].name', '2号篮子', '$[0].exts', '扩展') from json_test;

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

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

select JSON_REPLACE(json, '$[0].name', '替换') from json_test;

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

JSON_REMOVE(json_doc, path[, 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[, 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, val[, 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_doc] ...)  合并json文档,如果有重复键,则会通过数组把值都保存起来

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

  

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

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

  

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

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

  

mysql5.7 新增的json字段类型的更多相关文章

  1. 【mysql】mysql5.7支持的json字段查询【mybatis】

    mysql5.7支持的json字段查询 参考:https://www.cnblogs.com/ooo0/p/9309277.html 参考:https://www.cnblogs.com/pfdltu ...

  2. mysql 5.7 json 字段类型查找、修改

    修改 json 里的数组字段 mysql> set @json = '{"test": [{"name": "laravel"}, { ...

  3. 新增时json类型报错

    新增时出错:如下 实体类中字段类型没有对应上,vue页面中修改跳转页面的路径:使用params...

  4. Tapdata Cloud 2.1.2 来啦:大波细节已就绪!字段类型可批量修改、支持微信扫码登录、新增支持 Vika 为目标

    Tapdata Cloud cloud.tapdata.net 让数据实时可用 Tapdata Cloud 是国内首家异构数据库实时同步云平台,目前支持 Oracle.MySQL.PG.SQL Ser ...

  5. Hive 外部表新增字段或者修改字段类型等不生效

    标题比较笼统,实际情况是: 对于Hive 的分区外部表的已有分区,在对表新增或者修改字段后,相关分区不生效. 原因是:表元数据虽然修改成功,但是分区也会对应列的元数据,这个地方不会随表的元数据修改而修 ...

  6. MySQL中JSON字段的使用技巧

    mysql5.7.8之后开始原生支持json. 在类似mongodb这种nosql数据库中,json存储数据是非常自然的, 在mysql中合理的使用json,能够带来极大的便利 Json字段的使用场景 ...

  7. PG 中 JSON 字段的应用

    13 年发现 pg 有了 json 类型,便从 oracle 转 pg,几年下来也算比较熟稔了,总结几个有益的实践. 用途一:存储设计时无法预料的文档性的数据.比如,通常可以在人员表准备一个 json ...

  8. MySQL5.7中使用JSON(一)

    因为项目需要,存储字段存储成了JSON格式,在项目中是将查询出来的值通过jackson转成相应的bean进行处理的,觉得不够简单方便. 偶然下,知道了MYSQL5.7原生支持SQL,今天一回来就折腾安 ...

  9. MySQL5.7中使用JSON

    一.创建表 CREATE TABLE `user` ( `uid` int(11) NOT NULL AUTO_INCREMENT, `info` json DEFAULT NULL, #注意desc ...

随机推荐

  1. Linux安装卸载jdk1.8

    首先到官网下载  Linux x64 182.87 MB jdk-8u191-linux-x64.tar.gz https://www.oracle.com/technetwork/java/java ...

  2. harbor仓库镜像的删除

    harbor仓库镜像的删除 刚开始自己摸索了下,直接webui界面删除后,发现仓库空间未释放 上传之前仓库空间占用为 上传之后仓库空间占用为 在webui界面上删除镜像后 查看大小 依旧为286m,到 ...

  3. angularjs 请求数据转换为Form Data传参

    在angularjs中配置好服务,有时传参会导致后台借不到值或者后台直接报错: 这就与后台框架有关,如果后台是以public ModelAndView接收接口传过来的参数,这种情况,前台传参的形式比较 ...

  4. 设置git的http代理

    如果git仓库不和本地代码之间不可以直达,这个时候就可以考虑使用git 代理的方式提交代码到git仓库了; git http代理或者https代理,配置在~/.gitconfig 文件下,可以直接编辑 ...

  5. C# 汉字转拼音(全拼)

    C# 汉字转拼音(全拼)     很多时候我们需要把汉字转换成拼音,比如姓名.城市名等.网上搜索了一把,把汉字转成拼音的代码很多,但大多都只是把汉字转成了拼音的首字母,比如把“深圳”转成了“sz”.那 ...

  6. 代码规范【经理培训内容记录】[有参考:http://kb.cnblogs.com/page/179593/]

    一.命名规范 方法:所有首字母大写,如BloodControl; 类:所有首字母大写: 变量:第一个首字母小写,其他首字母大写:如bloodControl; 常量:全部字母大写,可用下划线分隔:如BL ...

  7. 五, Authentication和Permissions

    概述 在介绍Django REST Framework(二):Request和Response 时提到,DRF提供了对身份验证和权限的处理机制,特点如下: 1.对API的不同部分使用不同的认证策略: ...

  8. Matlab练习——rpy2tr函数与自己实现的ZYX欧拉角的结果不同的问题

    问题背景:在根据<机器人导论>这本书的Z-Y-X欧拉角原理用Matlab实现旋转矩阵求解时,发现与直接调用机器人工具箱中的rpy2tr()函数得出的结果并不相同. 首先:先检查自己写的函数 ...

  9. Html----表单元素

    表单元素:用于客户端和服务端进行信息交互的通道 <form></form>:所有的表单元素都应该放在里面 文本输入框: <input type="text&qu ...

  10. js原型、原型链、作用链、闭包全解

    https://www.2cto.com/kf/201711/698876.html [对象.变量] 一个对象就是一个类,可以理解为一个物体的标准化定义.它不是一个具体的实物,只是一个标准.而通过对象 ...