首页 > 数据库 >MySql之json_extract函数处理json字段

MySql之json_extract函数处理json字段

时间:2022-11-02 20:04:05浏览次数:77  
标签:灰灰 name val blog json MySql extract


​MySql之json_extract函数处理json字段​

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

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

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或者有更好的建议,欢迎批评指正,不吝感激

标签:灰灰,name,val,blog,json,MySql,extract
From: https://blog.51cto.com/u_3408236/5817965

相关文章

  • fastjson的详细用法
    fastjson的详细用法1.作用:fastjson用于将JavaBean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。2.导入依赖:<dependencies><dependency......
  • mysql——partition by
    参考:https://www.cnblogs.com/xiaohuizhenyoucai/p/10636747.htmlhttps://www.jianshu.com/p/785f0edac47f partition by关键字是分析性函数的一部分,它和聚合函数(如......
  • MYSQL数据库之事务
    一、事务的ACID特性原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。一致性(Consistency):事务开始前和结束后,数据库的完整性约......
  • 解决Deprecated: mysql_connect(): The mysql extension is deprecated_F_hawk1
    解决方法1:禁止php报错display_errors=On改为display_errors=Offdisplay_errors=On改为display_errors......
  • mysql——left join on and和left join on where的区别
    参考https://www.cnblogs.com/cgsdg/p/16426658.html 总结:and条件语句不会剔除不满足条件的左表的行。where条件语句会剔除。   ......
  • Docker--mysql(centos)
    Docker--mysql当前启动systemctlstartdocker自启动systemctlenabledocker1.拉取mysql镜像dockerpullmysql:5.7其他版本参考dockerhub2.创建容器,并启动1.......
  • MySQL_外连接
    左/右外连接应用场景用于查询一个表中有,另一个表中没有的记录特点1外连接的查询结果为主表中的所有记录      如果从表中有和它匹配的,则显示匹配的值......
  • MySQL_连接查询_小结
    Sql92VSsql99功能      Sql99支持的较多可读性      Sql99实现连接条件和筛选条件的分离,可读性较高 #内连接SELECT<select_list>FROMAINNERJ......
  • MySQL__连接查询_sql99
    语法Select查询列表From表1别名【连接类型】Join表2别名On连接条件【Where筛选条件】【groupby分组】【having筛选条件】【orderby排序列表】内连接......
  • mysql 性能问题查找
    进程相关命令1.显示哪些线程正在运行:只列出前100条方法1showprocesslist;![](https://img2022.cnblogs.com/blog/2298258/202211/2298258-20221102113410395-37886337......