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