在遗留的系统,可以存在这样的场景:
非json类型字段,存储着json串。我们在select的时候,期望获取该字段中的部分属性值。
例如:
CREATE TABLE IF NOT EXISTS `good` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`histories` LONGTEXT NULL,
PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4;
我们的good表中histories是一个LONGTEXT类型,非json类型,但它里面存在的json串。例如:
[{"status": "Start", "createdTime": "2021-09-01 11:44:17"},{"status": "End", "createdTime": "2021-09-01 11:44:17"}]
格式化后:
[{
"status": "Start",
"createdTime": "2021-09-01 11:44:17"
}, {
"status": "End",
"createdTime": "2021-09-01 11:44:17"
}]
- 如果我们需要获取json数组中的第一个对象,我们可以采用如下的sql。
select id,
JSON_EXTRACT(histories, '$[0]')
from good;
- 如果需要获取json数组中的第二个对象中的status属性的值,可以采用如下的sql。
select id,
JSON_EXTRACT(histories -> '$[1]', '$.status')
from good;