MySql之json_extract函式處理json欄位
持續創作,加速成長!這是我參與「掘金日新計劃 · 6 月更文挑戰」的第3天,點選檢視活動詳情
在db中儲存json格式的資料,相信大家都或多或少的使用過,那麼在查詢這個json結構中的資料時,有什麼好的方法麼?取出String之後再程式碼中進行解析?
接下來本文將介紹一下Mysql5.7+之後提供的json_extract函式,可以通過key查詢value值
1. 使用方式
資料儲存的資料是json字串,型別為我們常用的varchar即可
語法:
JSON_EXTRACT(json_doc, path[, path] …)
若json字串非陣列時,可以通過$.欄位名
來表示查詢對應的value
2.使用演示
建立一個測試的表
sql
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;
插入幾條資料
sql
insert into `json_table` values (1, '{"name": "一灰灰blog", "age": 18}');
insert into `json_table` values (2, '{"name": "一灰灰blog", "site": "http://blog.hhui.top"}');
查詢json串中的name
,如下
bash
mysql> select json_extract(`val`, '$.name') from `json_table`;
+-------------------------------+
| json_extract(`val`, '$.name') |
+-------------------------------+
| "一灰灰blog" |
| "一灰灰blog" |
+-------------------------------+
如果查詢的key不在json串中,返回的是null,而不是拋異常
bash
mysql> select json_extract(`val`, '$.name') as `name`, json_extract(`val`, '$.site') as `site` from `json_table`;
+-----------------+-------------------------+
| name | site |
+-----------------+-------------------------+
| "一灰灰blog" | NULL |
| "一灰灰blog" | "http://blog.hhui.top" |
+-----------------+-------------------------+
接下來再看一下如果為json陣列,怎麼整
``sql
mysql> insert into
json_table` values (3, '[{"name": "一灰灰", "site": "http://spring.hhui.top"}]');
mysql> select json_extract(val
, '$[0].name') from json_table
where id = 3;
+----------------------------------+
| json_extract(val
, '$[0].name') |
+----------------------------------+
| "一灰灰" |
+----------------------------------+
```
除了在查詢結果中使用json_extract之外,也可以在查詢條件中使用它
bash
mysql> select * from `json_table` where json_extract(`val`, '$.name') = '一灰灰blog';
+----+------------------------------------------------------------+
| id | val |
+----+------------------------------------------------------------+
| 1 | {"age": 18, "name": "一灰灰blog"} |
| 2 | {"name": "一灰灰blog", "site": "http://blog.hhui.top"} |
+----+------------------------------------------------------------+
3. 小結
本文主要介紹json_extract函式的使用姿勢,用於解析欄位內value為json串的場景
基本使用姿勢
- json物件:json_extract('db欄位', '$.json串key')
- json陣列:json_extract('db欄位', '$[陣列下標].json串key')
一灰灰的聯絡方式
盡信書則不如無書,以上內容,純屬一家之言,因個人能力有限,難免有疏漏和錯誤之處,如發現bug或者有更好的建議,歡迎批評指正,不吝感激
- 個人站點:http://blog.hhui.top
- 微博地址: 小灰灰Blog
- QQ: 一灰灰/3302797840
- 微信公眾號:一灰灰blog
- 萬字總結:分散式系統的38個知識點
- 基於MySql,Redis,Mq,ES的高可用方案解析
- 1w5字詳細介紹分散式系統的那些技術方案
- Java基本功:List轉Map List的幾種姿勢
- MySql之json_extract函式處理json欄位
- ElasticSearch基本使用姿勢二
- 【SpringBoot DB 系列】h2databse 整合示例 demo
- Grafana使用語法之ES/Luence篇
- Linux小技巧:使用NC實現檔案傳輸
- Guava HashMultimap使用及注意事項
- 程式設計師的浪漫:三十行程式碼實現用她的名字作幅畫
- 程式設計師的浪漫:三十行程式碼實現用她的名字作幅畫
- 實戰小技巧6:列舉的特殊用法
- 【WEB系列】內嵌Tomcat配置Accesslog日誌檔案生成位置原始碼探索
- 【搜尋系列】ES查詢常用例項演示
- 【搜尋系列】ES文件基本操作CURD例項演示
- 【搜尋系列】ES基本專案搭建
- Nosql儲存系統-叢集工作原理
- 例項演示,帶你瞭解終端神器ncat
- Redis:你真的會Redis麼,一文告訴你如何學習