json
json 是什么
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
数组[]
对象{}
key:value
var user = {name:lisi,age:18,score:[80,90,30,20]} json对象
user.name
user.age
user.score[0]
json string integer double object array null boolean
json_type('"hello"'); STRING
select '["java",10,true,false,{},[],null]'
select json_type('["java",10,true,false,{},[],null]'),json_type('{}');
select json_type('"hello"'),json_type('18.0'),json_type('true');
-- 将多个元素转换为一个json数组字符串对象
select json_array(1,2,3,4,6,7,10); -- '[1,2,3,4,6,7,10]'
-- {"age": 18, "name": "lisi", "address": "郑州"}
-- {"age": 18, "name": "lisi", "address": "郑州", "isStudent": true}
select json_object('name','lisi','age',18,'address','郑州','isStudent',true);
set @jj = json_object('name','lisi','age',18,'address','郑州','isStudent',true);
select @jj;
select json_extract(@jj,'$.address');
json_set() 向json中插入数据,有的覆盖,没有的插入
json_insert() 向json中插入数据,有的无视,没有的要插入
json_replace() 向json中替换数据,有的替换,没有无视
json_remove() 删除值
json_length() 返回元素个数
set @jj = json_object('name','lisi','age',18,'address','郑州','isStudent',true);
select @jj;
select json_extract(@jj,'$.address');
select json_set('"x"','$[0]','abc');
-- 在数据库判断等不等,是一个等号1 就是true 0就是false
select 2=3;
select json_object('name','lisi','age',18) = json_object('age',18,'name','lisi');
set @aa = '{"age":10,"lang":["java","php"]}';
-- OBJECT
select json_type(@aa);
select @aa;
select json_set(@aa,'$.age',1000,'$.love','[true,false]');
select json_insert(@aa,'$.age',1000,'$.love','[true,false]');
select json_replace(@aa,'$.age',1000,'$.love','[true,false]');
-- 删除值
select json_remove(@aa,'$.lang');
创建表
CREATE TABLE t_json(id INT PRIMARY KEY, NAME VARCHAR(20) , info JSON);
插入记录
INSERT INTO t_json(id,sname,info) VALUES(1 ,'test','{"time":"2017-01-01 13:00:00","ip":"192.168.1.1","result":"fail"}');
INSERT INTO t_json(id,sname,info) VALUES(2 ,'my',JSON_OBJECT("time",NOW(),'ip','192.168.1.1','result','fail'));
查询IP键
SELECT sname,JSON_EXTRACT(info,'$.ip') FROM t_json;
查询有多少个键
SELECT id,json_keys(info) AS "keys" FROM t_json;
删除键
UPDATE t_json SET info = json_remove(info,'$.ip');
增加键
UPDATE t_json SET info = json_set(info,'$.ip','192.168.1.1');
变更值
UPDATE t_json SET info = json_set(info,'$.ip','192.168.1.2');
实例操作代码
-------------------------------------------------------------------
create table myj(
id int unsigned auto_increment primary key,
name varchar(10),
books json
)
insert into myj values(null,'jack',null);
select * from myj;
update myj set name = 'lisi';
update myj set books = '{"id":10,"name":"《java实战》","price":80.6}';
select * from myj;
-- 查询
select id 编号,name 姓名,json_unquote(json_extract(books,'$.name')) 书籍名称 from myj;
-- json_set() json_insert() json_replace()
-- select * from myj;
-- 修改
update myj set books = json_replace(books,'$.name','《java项目实战教程》','$.price',100);
-- 删除指定部分
update myj set books = json_remove(books,'$.price');