MySql之json_extract函式處理json欄位

語言: CN / TW / HK

持續創作,加速成長!這是我參與「掘金日新計劃 · 6 月更文挑戰」的第3天,點選檢視活動詳情

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.使用演示

建立一個測試的表

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 intojson_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或者有更好的建議,歡迎批評指正,不吝感激