乐趣区

关于mysql:MySql之jsonextract函数处理json字段

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';
+----+------------------------------------------------------------+
| id | val                                                        |
+----+------------------------------------------------------------+
|  1 | {"age": 18, "name": "一灰灰 blog"}                          |
|  2 | {"name": "一灰灰 blog", "site": "https://blog.hhui.top"}    |
+----+------------------------------------------------------------+

3. 小结

本文次要介绍 json_extract 函数的应用姿态,用于解析字段内 value 为 json 串的场景

根本应用姿态

  • json 对象:json_extract(‘db 字段 ’, ‘$.json 串 key’)
  • json 数组:json_extract(‘db 字段 ’, ‘$[数组下标].json 串 key’)

一灰灰的联系方式

尽信书则不如无书,以上内容,纯属一家之言,因集体能力无限,不免有疏漏和谬误之处,如发现 bug 或者有更好的倡议,欢送批评指正,不吝感谢

  • 集体站点:https://blog.hhui.top
  • 微博地址: 小灰灰 Blog
  • QQ:一灰灰 /3302797840
  • 微信公众号:一灰灰 blog

退出移动版