mysql的json使用
目录
一、前言
二、常见使用:
1、创建一个新表
2、数据的插入:
3、路径语法:
4、数据的查询:
5、其他常用方法:
一、前言
mysql在5.7版本之后就开始支持json数据类型了,json数据类型在存储的时候会做格式校验,不满足json格式的会报错。相比于Json格式的字符串类型,Json数据类型的优势有:
(1)存储在JSON列中的JSON内容的会被自动验证。不符合Json书写规范的会产生错误;
(2)最佳存储格式。存储在JSON列中的JSON文档会被转换为允许快速读取文档元素的内部格式;
(3)最主要的就是不用每次新增属性的时候都要修改表的结构增加对应的列,影响所有的数据。
二、常见使用:
1、创建一个新表
#表名t_json;id为主键列且自增;json_info列类型为json
create table t_json(id int auto_increment,json_info json,primary key(id)
);
2、数据的插入:
JSON字段插入数据的时候有两种方式:一种是直接插入满足json格式的原生字符串;另外一种是使用JSON_OBJECT、JSON_ARRAY函数先构建好json数据然后再插入数据。举个例子,前者就是'{"id": 1, "name": "张三", "age": 18}后者就是JSON_OBJECT('id', 2, 'name', '李四', 'age', 18}。
注:JSON_OBJECT、JSON_ARRAY这些方法名,大小写均可。
(1)直接插入原生json格式字符串:
#直接插入json格式字符串
insert into t_json (json_info) values('{"name":"tom","age":"20"}');
#直接插入json格式字符串(包含array数组)
insert into t_json (json_info) values('{"name":"shuozhuo","age":"25", "familymember":[{"name":"zhizhuo","age":26},{"name":"louzhuo","age":55}]}');
注:个人推荐用这个原生json格式的数据比较好,同json的学习相互促进。
(2)使用JSON_OBJECT、JSON_ARRAY函数先构建好json数据然后再插入数据
#使用JSON_OBJECT构建json数据(这里把age当成string)
insert into t_json (json_info) values(JSON_OBJECT('name','Jane','age','23'));
#使用JSON_OBJECT构建json数据、使用JSON_ARRAY构建数组(这里把age当成string)
insert into t_json (json_info) values(JSON_OBJECT('name','zhizhuo','age','26','familymember',JSON_ARRAY(JSON_OBJECT('name','shuozhuo','age',25),JSON_OBJECT('name','louzhuo','age',55))));
(3)把上面的age字段的数字str更改成数值类型
update t_json set json_info = '{"name":"Tom","age":20}' where json_info->'$.name'='tom' limit 1;
update t_json set json_info = '{"name":"shuozhuo","age":25, "familymember":[{"name":"zhizhuo","age":26},{"name":"louzhuo","age":55}]}' where json_info->'$.name' ='shuozhuo' limit 1;
update t_json set json_info = JSON_OBJECT('name','Jane','age',23) where json_info->'$.name'='Jane' limit 1;
update t_json set json_info = JSON_OBJECT('name','zhizhuo','age',26,'familymember',JSON_ARRAY(JSON_OBJECT('name','shuozhuo','age',25),JSON_OBJECT('name','louzhuo','age',55))) where json_info->'$.name'='zhizhuo' limit 1;
注:update的时候一定要加上limit 1;否则在where被忽略的情况下不堪设想。
(4)再插几条数据
insert into t_json(json_info) values ('{"name": "张三", "age": 18, "sister": [{"name": "张大姐", "age": 30}, {"name": "张二姐", "age": 20}]}');
insert into t_json(json_info) values (JSON_OBJECT('name', '李四', 'age', 18, 'sister', JSON_ARRAY(JSON_OBJECT('name', '李大姐', 'age', 28), JSON_OBJECT('name', '李二姐', 'age', 25))));
insert into t_json(json_info) values ('{"name": "小明", "age": 18, "sister": [{"name": "小明大姐", "age": 25, "friend": [{"name": "大姐朋友一", "age": 25}, {"name": "大姐朋友二", "age": 25}]}, {"name": "小明二姐", "age": 20, "friend": [{"name": "二姐朋友一", "age": 22}, {"name": "二姐朋友二", "age": 21}]}]}');
3、路径语法:
在了解搜索和修改JSON值之前,先来看看JSON的路径语法。
(1).keyName:JSON对象中键名为keyName的值;
对于不合法的键名(如有空格),在路径引用中必须用双引号"将键名括起来,例,."key name";
(2)[index]:JSON数组中索引为index的值,JSON数组的索引同样从0开始;
[index1 to index2]:JSON数组中从index1到index2的值的集合;
(3).*: JSON对象中的所有value;
(4)[*]: JSON数组中的所有值;
(5)prefix**suffix: 以prefix开头并以suffix结尾的路径;
(6)**.keyName为多个路径,如对于JSON对象'{"a": {"b": 1}, "c": {"b": 2}}','$**.b'指路径$.a.b和$.c.b;
(7)不存在的路径返回结果为NULL;
(8)前导$字符表示当前正在使用的JSON文档
例子:对于数组[3, {"a": [5, 6], "b": 10}, [99, 100]]
$[1]为{"a": [5, 6], "b": 10}。
[1].a为[5, 6]。
$[1].a[1]为 6。
$[1].b为 10。
$[2][0]为 99。
4、数据的查询:
#1.查看表中的所有数据
select * from t_json;#2.引用json字串中的一级属性——列名->'$.属性名'
select * from t_json where json_info->'$.name'='李四';
select * from t_json where json_info->'$.age'='25';
select json_info->'$.age' as age,json_info->'$.name' as name
from t_json where json_info->'$.name'='shuozhuo';#3.引用json字串的json数组中的属性——列名->'$.数组名[index].数组内属性'
select json_info->'$.age' as age,json_info->'$.name' as name,json_info->'$.familymember[0].name' as membername
from t_json where json_info->'$.name'='shuozhuo';
select json_info->'$.age' as age,json_info->'$.name' as name,json_info->'$.familymember[0].name' as membername
from t_json where json_info->'$.name'='shuozhuo';
select json_info->'$.age' as age,json_info->'$.name' as name,json_info->'$.familymember[*].name' as membername
from t_json where json_info->'$.name'='shuozhuo';
注:index中填'*'表示所有。#4.查看数据类型——使用JSON_TYPE
select JSON_TYPE(json_info) as info_type,JSON_TYPE(json_info->'$.age') as age_type,JSON_TYPE(json_info->'$.name') as name_type,JSON_TYPE(json_info->'$.familymember') as fmember_type
from t_json
where json_info->'$.name' = 'shuozhuo';#5.从column中提取json值—— JSON_EXTRACT
(1)JSON对象
select JSON_EXTRACT('{"name":"cuocuo","age":24}','$.name'); #一个最简单直观的例子
+-----------------------------------------------------+
| JSON_EXTRACT('{"name":"cuocuo","age":24}','$.name') |
+-----------------------------------------------------+
| "cuocuo" |
+-----------------------------------------------------+
select JSON_EXTRACT(json_info,'$.name') as name,JSON_EXTRACT(json_info, '$.age') as age from t_json;
+------------+------+
| name | age |
+------------+------+
| "Tom" | 20 |
| "shuozhuo" | 25 |
| "Jane" | 23 |
| "zhizhuo" | 26 |
| "张三" | 18 |
| "李四" | 18 |
| "小明" | 18 |
+------------+------+
(2)JSON数组
select JSON_EXTRACT('["aaaa","bbbb","cccc","dddd"]','$[1]'); #一个最简单直观的例子
+------------------------------------------------------+
| JSON_EXTRACT('["aaaa","bbbb","cccc","dddd"]','$[1]') |
+------------------------------------------------------+
| "bbbb" |
+------------------------------------------------------+
5、mysql json其他常用方法:
(1)JSON_REPLACE——替换值(只替换已经存在的旧值)
select json_replace('{"name":"cuocuo","age":20}','$.name',"tancuocuo",'$.age',25);
+----------------------------------------------------------------------------+
| json_replace('{"name":"cuocuo","age":20}','$.name',"tancuocuo",'$.age',25) |
+----------------------------------------------------------------------------+
| {"age": 25, "name": "tancuocuo"} |
+----------------------------------------------------------------------------+
(2)JSON_SET——设置值(对旧值替换,对不存在的则插入)
select json_set('{"name":"cuocuo","age":20}','$.name',"tancuocuo",'$.high',160);
+--------------------------------------------------------------------------+
| json_set('{"name":"cuocuo","age":20}','$.name',"tancuocuo",'$.high',160) |
+--------------------------------------------------------------------------+
| {"age": 20, "high": 160, "name": "tancuocuo"} |
+--------------------------------------------------------------------------+
(3)JSON_INSERT——插入值(插入新值,但不替换已经存在的旧值)
select json_insert('{"name":"cuocuo","age":20}','$.name',"tancuocuo",'$.high',160);
+-----------------------------------------------------------------------------+
| json_insert('{"name":"cuocuo","age":20}','$.name',"tancuocuo",'$.high',160) |
+-----------------------------------------------------------------------------+
| {"age": 20, "high": 160, "name": "cuocuo"} |
+-----------------------------------------------------------------------------+
(4)JSON_REMOVE——删除JSON中的某项
select json_remove('["aaaa","bbbb","cccc","eeee"]','$[2]');
+-----------------------------------------------------+
| json_remove('["aaaa","bbbb","cccc","eeee"]','$[2]') |
+-----------------------------------------------------+
| ["aaaa", "bbbb", "eeee"] |
+-----------------------------------------------------+
参考:https://www.jianshu.com/p/25161add5e4b
https://blog.csdn.net/u011207553/article/details/88912219
https://blog.csdn.net/asd529735325/article/details/107205214
mysql的json使用相关推荐
- MybatisPlus处理Mysql的json类型
MybatisPlus处理Mysql的json类型 1.在数据库表定义JSON字段: 2.在实体类加上@TableName(autoResultMap = true).在JSON字段映射的属性加上@T ...
- mysql存json将utf8编码 去掉,MySQL对JSON类型UTF-8编码导致中文乱码探讨
原文:https://www.cnblogs.com/CreateMyself/p/12587426.html 前言 继上文发表之后,结合评论意见并亲自验证最终发现是编码的问题,但是对于字符编码还是有 ...
- MySQL对JSON类型UTF-8编码导致中文乱码探讨
继上文发表之后,结合评论意见并亲自验证最终发现是编码的问题,但是对于字符编码还是有点不解,于是乎,有了本文,我们来学习字符编码,在学习的过程中,我发现对于MySQL中JSON类型的编码导致数据中文出现 ...
- mysql的json函数与实例_Mysql实例详解Mysql中的JSON系列操作函数
<Mysql实例详解Mysql中的JSON系列操作函数>要点: 本文介绍了Mysql实例详解Mysql中的JSON系列操作函数,希望对您有用.如果有疑问,可以联系我们. MYSQL必读前言 ...
- MySql中json类型的使用___mybatis存取mysql中的json
MySql中json类型的使用 MySQL从5.7.8起开始支持JSON字段,这极大的丰富了MySQL的数据类型.也方便了广大开发人员.但MySQL并没有提供对JSON对象中的字段进行索引的功能,至少 ...
- MySQL中 JSON 数据类型应用
前言 今天接触到mysql中json数据类型,之前不知道有这个类型,今天学习一下. JSON我相信大家都已经很熟悉了,但在 MySQL中,直至 5.7 版本中,才正式引入 JSON数据类型.在次之前, ...
- mysql讀取sql_MySQL数据库之python json及mysql读取json文件存sql等问题
本文主要向大家介绍了MySQL数据库之python json及mysql读取json文件存sql等问题 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. preface: 近期帮师 ...
- mysql varchar json_谈谈 MySQL 的 JSON 数据类型
MySQL 5.7 增加了 JSON 数据类型的支持,在之前如果要存储 JSON 类型的数据的话我们只能自己做 JSON.stringify() 和 JSON.parse() 的操作,而且没办法针对 ...
- mysql操作json优点和缺点_详解Mysql中的JSON系列操作函数
前言 JSON是一种轻量级的数据交换格式,采用了独立于语言的文本格式,类似XML,但是比XML简单,易读并且易编写.对机器来说易于解析和生成,并且会减少网络带宽的传输. JSON的格式非常简单:名称/ ...
- 五、Mysql中JSON类型
文章目录 JSON类型 JSON入门 JSON 函数 JSON_OBJECT 将对象转为 json json_insert 插入数据 json_merge 合并数据并返回 其他函数: JSON 索引 ...
最新文章
- ldd3笔记_3_编译模块
- os:进程与线程问题
- Python 用smtplib库发邮件报错:[WinError 10061] 由于目标计算机积极拒绝,无法连接。解决办法
- qprocess调用linux命令
- 09年03月27日--request 之 getParameterMap
- debian重启ssh服务_Jenkins远程部署Linux服务器
- 无偏PU learning简介
- PHP不读取Excel空行,phpexcel中遇到空单元格不跳过
- 对比MS Test与NUnit Test框架
- ajax 请求成功 再执行javascript,jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法...
- android 巧用资源文件(不断积累)
- PHP中json对象转数组过程中去除字符串中的换行与数字方法
- 科学计算机要用的电池是几号,科学计算器电池
- 企业对NAS私有云存储有什么样的需求,NAS网络存储又有哪些优势与功能呢?
- Java工程师和软件工程师的关系-蛙课网
- 卡西欧计算机怎么进制转换,casio计算器fx82es刷机实现十进制转其他进制的模式...
- 好用的BUG、内存泄露捕捉工具 EurekaLog v6.0.3 Enterprise For D5-D2007
- ArcToolbox工具名英汉对应
- 微信加拿大服务器,微信新功能,在加拿大也可以任意刷人民币了
- Win11玩不了红警怎么办?Win11玩不了红警解决方法分享
热门文章
- centos7 默认启动项_如何在centos7中搭建 ISCSI 服务
- 使用std:sort和Eigen根据矩阵某一行/列元素对矩阵的行/列排序
- 墙面有几种装修方法_新家装修时,家里墙面漏水了怎么办?三种方法解决不乱花钱...
- Python并发机制的实现(一)——多进程
- 系统报 “client没有所需的特权” 的解决方法
- C++-Qt【1】-退出程序静态调试
- ASP.Net Web API 的参数绑定[翻译]
- 使用Memcache在PHP中调试方法的介绍及应用
- 关于php中的json_encode和json_decode的”\“(反斜杠)的问题
- IOS 打包后安装崩溃,debug正常运行