当前位置:网站首页>MySql之json_extract函数处理json字段
MySql之json_extract函数处理json字段
2022-08-10 05:09:00 【小灰灰Blog】
在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

边栏推荐
猜你喜欢

顺序表的删除,插入和查找操作

成为黑客不得不学的语言,看完觉得你们还可吗?

EasyGBS connects to mysql database and prompts "can't connect to mysql server", how to solve it?

LeetCode 301. Remove Invalid Parentheses BFS

线程(中):线程安全

通过一个案例轻松入门OAuth协议

JavsSE => 多态

Zhongang Mining: Strong downstream demand for fluorite

一篇文章带你搞懂什么是幂等性问题?如何解决幂等性问题?

How to improve product quality from the code layer
随机推荐
Depth of carding: prevent model fitting method
【LeetCode】41、 缺失的第一个正数
Joomla vulnerability reproduced
ThreadPoolExecutor线程池原理
Ueditor editor arbitrary file upload vulnerability
线程(下):读写者模型\环形队列\线程池
LeetCode 301. Remove Invalid Parentheses BFS
ORA-16018 异常处理记录
summer preschool assignments
西门子Step7和TIA软件“交叉引用”的使用
flinkcdc 读取pgsql 的时间被放大了 有大佬知道咋回事吗 gmt_create':1
RadiAnt DICOM Viewer 2022.1 Crack
pytorch learning
How to choose the right oscilloscope probe in different scenarios
2022G3 Boiler Water Treatment Exam Mock 100 Questions and Mock Exam
Thread.sleep, Thread.yield role explanation
Rpc接口压测
Advanced Feature Selection Techniques in Linear Models - Based on R
Ask you guys.The FlinkCDC2.2.0 version in the CDC community has a description of the supported sqlserver version, please
【无标题】