MySQL里的json分为json array和json object。
$
表示整个json对象,在索引数据时用下标(对于json array,从0开始)或键值(对于json object,含有特殊字符的key要用"括起来,比如$.“my name”)。
示例:[123, {“aa”: [55, 66], “bb”: 77}, [88,99]],那么:
$[0]:123
$[1]: {“aa”: [55, 66], “bb”: 77}
$[2] :[88,99]
$[3] : NULL
$[1].aa:[55, 66]
$[1].aa[1]:66
$[1].bb:77
$[2][0]:88
语法
-
使用
字段->'$.json属性'
进行查询条件 -
使用json_extract函数查询,
json_extract(字段,"$.json属性")
-
根据json数组查询,用
JSON_CONTAINS(字段,JSON_OBJECT('json属性', "内容"))
测试表
对应的SQL
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
– Table structure for tb_emp
DROP TABLE IF EXISTS tb_emp
;
CREATE TABLE tb_emp
(
id
int(0) NOT NULL AUTO_INCREMENT COMMENT ‘员工编号’,
ename
varchar(12) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT ‘员工姓名’,
info
json NULL COMMENT ‘员工信息’,
PRIMARY KEY (id
) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
– Records of tb_emp
INSERT INTO tb_emp
VALUES (1, ‘SMITH’, ‘{“job”: “CLERK”, “mgr”: 7902, “sal”: 800.0, “comm”: null, “empno”: 7369, “ename”: “SMITH”, “deptno”: 20, “hiredate”: 345830400000}’);
INSERT INTO tb_emp
VALUES (2, ‘ALLEN’, ‘{“job”: “SALESMAN”, “mgr”: 7698, “sal”: 1600.0, “comm”: 300.0, “empno”: 7499, “ename”: “ALLEN”, “deptno”: 30, “hiredate”: 351446400000}’);
INSERT INTO tb_emp
VALUES (3, ‘WARD’, ‘{“job”: “SALESMAN”, “mgr”: 7698, “sal”: 1250.0, “comm”: 500.0, “empno”: 7521, “ename”: “WARD”, “deptno”: 30, “hiredate”: 351619200000}’);
INSERT INTO tb_emp
VALUES (4, ‘JONES’, ‘{“job”: “MANAGER”, “mgr”: 7839, “sal”: 2975.0, “comm”: null, “empno”: 7566, “ename”: “JONES”, “deptno”: 20, “hiredate”: 354988800000}’);
INSERT INTO tb_emp
VALUES (5, ‘MARTIN’, ‘{“job”: “SALESMAN”, “mgr”: 7698, “sal”: 1250.0, “comm”: 1400.0, “empno”: 7654, “ename”: “MARTIN”, “deptno”: 30, “hiredate”: 370454400000}’);
INSERT INTO tb_emp<