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

MySql之json_extract函数处理json字段

时间:2023-12-26 09:13:13浏览次数:43  
标签:灰灰 name val blog json MySql extract

转自:链接:https://juejin.cn/post/7103482347894358046

 

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')

 

标签:灰灰,name,val,blog,json,MySql,extract
From: https://www.cnblogs.com/y593216/p/17927348.html

相关文章

  • 2数据库之Mysql基本操作
                                                                                                      数据库基本类型、基本操作一.......
  • MySQL-索引数据结构
    BTreeB-树即B树。指的是BalanceTree,也就是平衡树,平衡树是一颗查找树,并且所有叶子节点位于同一层。每个结点存储M/2到M个关键字,非叶子结点存储指向关键字范围的子结点。所有关键字在整颗树中出现,且只出现一次,非叶子结点可以命中。B+Tree是B树的一种变形,它是基于B......
  • MySQL索引-索引结构
    索引是什么索引是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查询算法,这种数据结构就是索引。优缺点:优点:提高数据检索效率,降低数据库的IO成本通......
  • mysql主从同步原理
    (1)master服务器将数据的改变记录二进制binlog日志,当master上的数据发生改变时,则将其改变写入二进制日志中(2)slave服务器会在一定时间间隔内对master二进制日志进行探测其是否发生改变,如果发生改变,则开始一个IOThread请求master二进制事件(3)同时主节点大每个O线程启动一个du......
  • 数据库 Mysql 多表查询,left join联合两个sql示例
    SELECTt1.RowID,t1.UserID,t1.CreateDate,t1.BatchState,t2.InputDataCount,t1.QtyFROM(SELECT@curRow:=@curRow+1ASRowID,`UserID`,DATE_FORMAT(CreateDate,'%Y-%m-%d')ASCreateDate,......
  • 数据库 MySql快速导入外部数据库流程
    适用于新安装MySql本地没有数据情况外部MySql数据库文件任务管理器停用Mysql进程将外部文件替换本地默认文件即可重启电脑导入完成。......
  • 保姆级搭建Mysql 并进行视图可视化操作
    安装MySQL数据库选择mysql5.7.36_x32.msi”,双击运行,如下图所示:在此窗口中,选择“Custom”选项,点击“Next>”进入下一步;在此窗口中,选择+号下的MySQLServer5.7.36–x64,点击中间的绿色箭头符号,添加完成如下图所示:然后点击“Next>”进入下一步进行安装;继续点击“Next>”进入下一步......
  • 美团面试:ES+Redis+MySQL高可用,如何实现?
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......
  • mysql执行计划之Extra列-Using where
    顾名思义,Extra列是用来说明一些额外信息的,我们可以通过这些额外信息来更准确的理解MySQL到底将如何执行给定的查询语句。MySQL提供的额外信息很多。这里单说Usingwhere。Usingwhere只是表示MySQL使用where子句中的条件对记录进行了过滤。与是否全表扫描或读取了索......
  • Mysql基础增删改查语句
    一,基础语句1.增加Insert(特殊的如果id自动递增的话,就不需要插入id)基本语法 insertinto表名(列1,列2,列3,列4,...) values(值,值,值)例子 insertintostudent(name,sex,age)values('张三',18,'男')插入的另外一种形式:insertinto表名set列=值,列=值,列=值,....例子 insertinto......