在db中存儲json格式的數(shù)據(jù)喂分,相信大家都或多或少的使用過瞎疼,那么在查詢這個json結(jié)構(gòu)中的數(shù)據(jù)時,有什么好的方法么串纺?取出String之后再代碼中進行解析开皿?
接下來本文將介紹一下Mysql5.7+之后提供的json_extract函數(shù),可以通過key查詢value值
1. 使用方式
數(shù)據(jù)存儲的數(shù)據(jù)是json字符串波丰,類型為我們常用的varchar即可
語法:
JSON_EXTRACT(json_doc, path[, path] …)
若json字符串非數(shù)組時,可以通過$.字段名
來表示查詢對應(yīng)的value
2.使用演示
創(chuàng)建一個測試的表
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;
插入幾條數(shù)據(jù)
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數(shù)組,怎么整
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') |
+----------------------------------+
| "一灰灰" |
+----------------------------------+
除了在查詢結(jié)果中使用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. 小結(jié)
本文主要介紹json_extract函數(shù)的使用姿勢蝎亚,用于解析字段內(nèi)value為json串的場景
基本使用姿勢
- json對象:json_extract('db字段', '$.json串key')
- json數(shù)組:json_extract('db字段', '$[數(shù)組下標(biāo)].json串key')
一灰灰的聯(lián)系方式
盡信書則不如無書,以上內(nèi)容先馆,純屬一家之言发框,因個人能力有限,難免有疏漏和錯誤之處煤墙,如發(fā)現(xiàn)bug或者有更好的建議梅惯,歡迎批評指正,不吝感激
- 個人站點:https://blog.hhui.top
- 微博地址: 小灰灰Blog
- QQ: 一灰灰/3302797840
- 微信公眾號:一灰灰blog