Mysql中处理Json
- JSON_EXTRACT
select json_extract('{"name":"Zhaim","tel":"13240133388"}',"$.tel");
返回结果 "13240133388"
select json_extract('{"name":"Zhaim","tel":"13240133388"}',"$.name");
返回结果 "Zhaim"
select json_extract(data,'$.name') from tab_json;
可以直接对 表 进行操作, 会自己寻找对应key没有则返回null
json_extract json提取,可以从json对象中直接提取特定key的值, "$.key"
-
INSERT
INSERT INTO `t1` VALUES (1,'1','{"a":1, "b":"2"}');
用自带的insert插入Json对象
-
JSON_OBJECT
INSERT INTO `t1` VALUES (1, '1', JSON_OBJECT("a", 1, "b", "2"));
json_object 生成一个json对象
-
JSON_ARRAY
-- 插入json array到数据库 INSERT INTO `t1` VALUES (2, '2', JSON_ARRAY("arr", 1, 2)); -- [{"arr"},{1},{2}]
-
JSON_MERGE
JSON_MERGE( '{"a":3, "b":"3"}', '{"c":3, "d":"3"}', ) JSON_MERGE( JSON_OBJECT("a", 4, "b", "4"), JSON_OBJECT("c", 4, "d", "4") ) JSON_MERGE( '{"a":5, "b":"5"}', JSON_OBJECT("c", 5, "d", "5") )
合并的三种情况
-
JSON_INSERT
-- 让id=1的f2字段,增加age字段 UPDATE `t1` SET f2 = JSON_INSERT(f2, '$.age', 10) WHERE id = 1;
向Json中加入新的键值对 "age" = 10 , 若key存在,则不做任何操作
-
JSON_REPLACE
-- 将id=1的f2字段中,age字段的值替换为9 UPDATE `t1` SET f2 = JSON_REPLACE(f2, '$.age', 9) WHERE id = 1;
替换Json中的键值对的值, 若key不存在, 则不做任何操作
-
JSON_SET
-- 将id=1的f2字段中,age字段的值设置为8 UPDATE `t1` SET f2 = JSON_REPLACE(f2, '$.age', 8) WHERE id = 1;
替换,若不存在则加入 , 相当于JSON_REPLACE + JSON_INSERT
-
JSON_REMOVE
-- 将id=1的f2字段中,age字段移除 UPDATE `t1` SET f2 = JSON_REMOVE(f2, '$.age') WHERE id = 1;
移除指定字段
-
JSON_CONTAINS
select * from dept WHERE JSON_CONTAINS(json_value, JSON_OBJECT("deptName","部门5")) -- json_value 中是否有字段包含 JSON_OBJECT("deptName","部门5"))
-
其他情况
-- 一般查询 语法: json对象名->'$.json属性名' SELECT * FROM `course_resource` WHERE region->'$.city'='宁波市'