当前位置:网站首页>MySql之json_extract函数处理json字段
MySql之json_extract函数处理json字段
2022-08-03 05:28:00 【drnrrwfs】
在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": "", "age": 18}');
insert into `json_table` values (2, '{"name": "", "site": "https://blog.hhui.top"}');
查询json串中的name,如下
mysql> select json_extract(`val`, '$.name') from `json_table`;
+-------------------------------+
| json_extract(`val`, '$.name') |
+-------------------------------+
| "" |
| "" |
+-------------------------------+
如果查询的key不在json串中,返回的是null,而不是抛异常
mysql> select json_extract(`val`, '$.name') as `name`, json_extract(`val`, '$.site') as `site` from `json_table`;
+-----------------+-------------------------+
| name | site |
+-----------------+-------------------------+
| "" | NULL |
| "" | "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') = '';
+----+------------------------------------------------------------+
| id | val |
+----+------------------------------------------------------------+
| 1 | {"age": 18, "name": ""} |
| 2 | {"name": "", "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
- 微信公众号:

先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
猜你喜欢
随机推荐
Makefile.am:24: error: Libtool library used but ‘LIBTOOL‘ is undefined
C#程序默认以管理员权限打开
2021新版idea过滤无用文件.idea .iml
【随笔】我为啥想写无关紧要的随笔?
MySql data format is converted to Redis key-value pair format
Zabbix历史数据清理(保留以往每个项目每天一条数据)
3D建模为什么会变得无处不在
沉铜/黑孔/黑影工艺,PCB该 Pick 哪一种?
域名管理常见问题:IP、域名和DNS之间的区别和关系
【multi_scale】多尺度训练——目标检测训练trick
PHP Composer常用命令积累
在OracleLinux8.6的Zabbix6.0中监控Oracle11gR2
【OpenStack云平台】搭建openstack云平台
Monitoring Oracle11gR2 in Zabbix6.0 of OracleLinux8.6
PHP二维数组保留键值去重
交换机access口,hybrid口,trunk口的区别
3. What is the difference between final, finally, and finalize?
【YOLOv3 SPP 数据集准备】YOLOv3 SPP数据集准备代码理解
高密度 PCB 线路板设计中的过孔知识
2021-06-15









