添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

​MySql之json_extract函数处理json字段

1 年前
MySql 之 json_extract 函数处理 json 字段

在 db 中存储 json 格式的数据,相信大家都或多或少的使用过,那么在查询这个 json 结构中的数据时,有什么好的方法么?取出 String 之后再代码中进行解析?

接下来本文将介绍一下 Mysql5.7 + 之后提供的 json_extract 函数,可以通过 key 查询 value 值

<!-- more -->

1. 使用方式

数据存储的数据是 json 字符串,类型为我们常用的 varchar 即可

语法:

JSON_EXTRACT(json_doc, path[, path] …)

若 json 字符串非数组时,可以通过 $.字段名 来表示查询对应的 value

2. 使用演示

创建一个测试的表

CREATE TABLE `json_table` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `val` json DEFAULT NULL COMMENT 'json字符串',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

插入几条数据

insert into `json_table` values (1, '{"name": "一灰灰blog", "age": 18}');
insert into `json_table` values (2, '{"name": "一灰灰blog", "site": "https://blog.hhui.top"}');

查询 json 串中的 name ,如下

mysql> select json_extract(`val`, '$.name') from `json_table`;
+-------------------------------+
| json_extract(`val`, '$.name') |
+-------------------------------+
| "一灰灰blog"                  |
| "一灰灰blog"                  |
+-------------------------------+

如果查询的 key 不在 json 串中,返回的是 null,而不是抛异常

mysql> select json_extract(`val`, '$.name') as `name`, json_extract(`val`, '$.site') as `site` from `json_table`;
+-----------------+-------------------------+
| name            | site                    |
+-----------------+-------------------------+
| "一灰灰blog"    | NULL                    |
| "一灰灰blog"    | "https://blog.hhui.top" |
+-----------------+-------------------------+

接下来再看一下如果为 json 数组,怎么整

mysql> insert into `json_table` values (3, '[{"name": "一灰灰", "site": "https://spring.hhui.top"}]');
mysql> select json_extract(`val`, '$[0].name') from `json_table` where id = 3;
+----------------------------------+
| json_extract(`val`, '$[0].name') |
+----------------------------------+
| "一灰灰"                         |
+----------------------------------+

除了在查询结果中使用 json_extract 之外,也可以在查询条件中使用它

mysql> select * from `json_table` where json_extract(`val`, '$.name') = '一灰灰blog';