json是一种特殊字符串,轻量级的数据格式,不程序不同语言数据交换格式。
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
mysql 从5.7开始增加了json新的数据类型,此类型非常灵活。
目录
json对象的操作
首先建一个有json类型的表
create table db1.t5(
id int not null auto_increment primary key ,
obj json
)engine=innodb default charset =utf8 auto_increment=202202;
这里我们可以看到obj字段的类型是json
-- json_object返回一个对象 json中{}大括号也是对象的意思 两种方式都行 注意两种方式存对象的具体写法
insert into db1.t5 values (null,json_object('name','张三','gender','男','age',18));
insert into db1.t5 value (null,json_object('name','李四','gender','男','age',21));
insert into db1.t5 value (null,json_object('name','王五','gender','女','age',21));
insert into db1.t5 value (null,'{"name":"马六","gender":"女","age":22}');
insert into db1.t5 value (null,'{"name":"赵七","gender":"女","age":18}');
insert into db1.t5 value (null,'{"name":"周八","gender":"男","age":22}');
看看存入数据库里的内容
存好了json对象接下来开始查询
-- json_extract(字段名,'$.属性名')查询
-- 这种方式显示出来有双引号
-- 拉姆达表达式中obj->'$.name'显示的为有双引号,obj->>'$.name'显示的没有
select json_extract(obj,'$.name','$.age') from db1.t5;
-- 查询年龄为22的人
-- 方式一
select * from db1.t5 where json_extract(obj,'$.age')=22;
-- 方式二 拉姆达表达式
select * from db1.t5 where obj->'$.age'=21;
效果:
按年龄查询效果:
json_set(对象名,'$.属性名','值') 用于修改或插入属性值
-- json_set(对象名,'$.属性名','值') 用于修改或插入属性值
update db1.t5 set obj= (json_set(obj,'$.name','卸甲','$.age',18,'$.address','中国')) where id=202205;
效果如下:
json_remove(字段名,'$.属性') 用于删除属性
-- json_remove(字段名,'$.属性') 用于删除属性
update db1.t5 set obj=(json_remove(obj,'$.gender'))where id=202205;
效果如下:
json类型数组的操作:
新建一个表:
create table db1.t6(
id int not null auto_increment primary key ,
arr json
)engine=innodb default charset =utf8 auto_increment=20220201;
插入数据并查询:
insert into db1.t6 value (null,json_object('name','陈卸甲','myarr',json_array(10,'java',100,200)));
select * from db1.t6;
-- 数组索引从0开始
select arr->>'$.myarr[1]',arr->>'$.name' from db1.t6 where id=20220201;
效果如下:
其他的增删改查跟上面的一样