1. 程式人生 > 資料庫 >mysql5.7 新增的json欄位型別用法例項分析

mysql5.7 新增的json欄位型別用法例項分析

本文例項講述了mysql5.7 新增的json欄位型別用法。分享給大家供大家參考,具體如下:

一、我們先建立一個表,準備點資料

CREATE TABLE `json_test` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',`json` json DEFAULT NULL COMMENT 'json資料',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

mysql5.7 新增的json欄位型別用法例項分析

二、檢索json列的欄位

通過使用 -> 或 ->> 運算子檢索json列的欄位

select id,json->'$[0].items[0].name' from json_test;

mysql5.7 新增的json欄位型別用法例項分析

select id,json->>'$[0].items[0].name' from json_test;

mysql5.7 新增的json欄位型別用法例項分析

使用 -> 和 ->> 的區別是結果用了引號包裹。

三、處理json的一些函式

JSON_PRETTY(json_val) 以優雅的格式顯示json值

select id,JSON_PRETTY(json) from json_test\G;

JSON_CONTAINS(target,candidate[,path]) 判斷給定的candidate是否包含在target中,如果指定了path,則在指定路徑中進行查詢。

注意,注意,注意,這裡的candidate如果是數字,需要用單引號包裹,如果是字串,單引號裡再加上雙引號包裹。

select JSON_CONTAINS(json->'$[0].name','"1號籃子"') from json_test;
select JSON_CONTAINS(json,'"1號籃子"','$[0].name') from json_test;

JSON_CONTAINS_PATH(json_doc,one_or_all,path[,path] ...) 判斷json_doc中的路徑是否存在,通俗點說就是json中的key是否存在

select JSON_CONTAINS_PATH(json,'one','$[0].name','$[0].test') from json_test;

第二個引數'one'表示只要有一個key存在就返回1,否則為0

select JSON_CONTAINS_PATH(json,'all','$[0].test') from json_test;

第二個引數'all'表示所有key存在才返回1,否則為0

JSON_SET(json_doc,path,val[,val] ...)插入或更新資料並返回結果

select JSON_SET(json,'2號籃子','$[0].test','test') from json_test;

我們修改$[0].name的值,並新增一個key為test,值為test的項

JSON_INSERT(json_doc,val] ...)插入資料並返回結果,但不替換現有值。

select JSON_INSERT(json,'$[0].exts','擴充套件') from json_test;

這時$[0].name不會被更新,只會新增一個欄位$[0].exts

JSON_REPLACE(json_doc,val] ...) 替換現有值並返回結果

select JSON_REPLACE(json,'替換') from json_test;

將$[0].name中的值替換成新值

JSON_REMOVE(json_doc,path] ...)刪除資料並返回結果

select JSON_REMOVE(json,'$[0].name') from json_test;

刪除$[0].name這項資料

JSON_KEYS(json_doc[,path]) 獲取json文件中的所有鍵

select JSON_KEYS(json,'$[0]') from json_test;

獲取$[0]路徑下的所有鍵

JSON_LENGTH(json_doc[,path]) 獲取json文件的長度

select JSON_LENGTH(json,'$[0]') from json_test;

獲取$[0]下的元素數量

JSON_EXTRACT(json_doc,path] ...) 返回json文件中的資料

select JSON_EXTRACT(json,'$[0]') from json_test;
select JSON_EXTRACT(json,'$[0].name') from json_test;

返回json文件指定路徑下的資料

JSON_ARRAY([val[,val] ...]) 建立json陣列

select JSON_ARRAY(1,'2',true,5.6,null,now());

JSON_OBJECT([key,key,val] ...]) 通過鍵值對, 建立json物件

select JSON_OBJECT('name','xiaoxu','age',28,'height',1.72);

注意,這裡鍵和值要成對出現

JSON_MERGE_PATCH(json_doc,json_doc[,json_doc] ...) 合併json文件,如果有重複鍵,後面的資料覆蓋前面的

select JSON_MERGE_PATCH('{"name":"test1"}','{"name":"test2"}');

JSON_MERGE_PRESERVE(json_doc,json_doc] ...) 合併json文件,如果有重複鍵,則會通過陣列把值都儲存起來

select JSON_MERGE_PRESERVE('{"name":"test1"}','{"name":"test2"}');

JSON_QUOTE(string)通過用雙引號字元包裹並轉義內部引號和其他字元

select JSON_QUOTE('你好"世界"');

JSON_UNQUOTE(json_val) 將轉義字元轉換回普通字元

select JSON_UNQUOTE('你好\\t\"世界\"');

更多關於MySQL相關內容感興趣的讀者可檢視本站專題:《MySQL查詢技巧大全》、《MySQL常用函式大彙總》、《MySQL日誌操作技巧大全》、《MySQL事務操作技巧彙總》、《MySQL儲存過程技巧大全》及《MySQL資料庫鎖相關技巧彙總》

希望本文所述對大家MySQL資料庫計有所幫助。