国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

MySQL處理JSON常見函數的使用

瀏覽:5日期:2023-10-05 10:23:05

官方文檔:JSON Functions

Name Description JSON_APPEND() Append data to JSON document JSON_ARRAY() Create JSON array JSON_ARRAY_APPEND() Append data to JSON document JSON_ARRAY_INSERT() Insert into JSON array -> Return value from JSON column after evaluating path; equivalent to JSON_EXTRACT(). JSON_CONTAINS() Whether JSON document contains specific object at path JSON_CONTAINS_PATH() Whether JSON document contains any data at path JSON_DEPTH() Maximum depth of JSON document JSON_EXTRACT() Return data from JSON document ->> Return value from JSON column after evaluating path and unquoting the result; equivalent to JSON_UNQUOTE(JSON_EXTRACT()). JSON_INSERT() Insert data into JSON document JSON_KEYS() Array of keys from JSON document JSON_LENGTH() Number of elements in JSON document JSON_MERGE() Merge JSON documents JSON_OBJECT() Create JSON object JSON_QUOTE() Quote JSON document JSON_REMOVE() Remove data from JSON document JSON_REPLACE() Replace values in JSON document JSON_SEARCH() Path to value within JSON document JSON_SET() Insert data into JSON document JSON_TYPE() Type of JSON value JSON_UNQUOTE() Unquote JSON value JSON_VALID() Whether JSON value is valid

1. 概述

MySQL里的json分為json array和json object。 $表示整個json對象,在索引數據時用下標(對于json array,從0開始)或鍵值(對于json object,含有特殊字符的key要用'括起來,比如$.'my name')。

例如:[3, {'a': [5, 6], 'b': 10}, [99, 100]],那么:

$[0]:3

$[1]: {'a': [5, 6], 'b': 10}

$[2] :[99, 100]

$[3] : NULL

$[1].a:[5, 6]

$[1].a[1]:6

$[1].b:10

$[2][0]:99

2. 比較規則

json中的數據可以用 =, <, <=, >, >=, <>, !=, and <=> 進行比較。但json里的數據類型可以是多樣的,那么在不同類型之間進行比較時,就有優先級了,高優先級的要大于低優先級的(可以用JSON_TYPE()函數查看類型)。優先級從高到低如下:

BLOBBITOPAQUEDATETIMETIMEDATEBOOLEANARRAYOBJECTSTRINGINTEGER, DOUBLENULL 

3. 常用函數3.1 創建函數

3.1.1 JSON_ARRAY

JSON_ARRAY(val1,val2,val3...)

生成一個包含指定元素的json數組。

mysql> SELECT JSON_ARRAY(1, 'abc', NULL, TRUE, CURTIME());+---------------------------------------------+| JSON_ARRAY(1, 'abc', NULL, TRUE, CURTIME()) |+---------------------------------------------+| [1, 'abc', null, true, '11:30:24.000000'] |+---------------------------------------------+

3.1.2 JSON_OBJECT

JSON_OBJECT(key1,val1,key2,val2...)

生成一個包含指定K-V對的json object。如果有key為NULL或參數個數為奇數,則拋錯。

mysql> SELECT JSON_OBJECT(’id’, 87, ’name’, ’carrot’);+-----------------------------------------+| JSON_OBJECT(’id’, 87, ’name’, ’carrot’) |+-----------------------------------------+| {'id': 87, 'name': 'carrot'} |+-----------------------------------------+

3.1.3 JSON_QUOTE

JSON_QUOTE(json_val)

將json_val用'號括起來。

mysql> SELECT JSON_QUOTE(’null’), JSON_QUOTE(’'null'’);+--------------------+----------------------+| JSON_QUOTE(’null’) | JSON_QUOTE(’'null'’) |+--------------------+----------------------+| 'null' | ''null'' |+--------------------+----------------------+mysql> SELECT JSON_QUOTE(’[1, 2, 3]’);+-------------------------+| JSON_QUOTE(’[1, 2, 3]’) |+-------------------------+| '[1, 2, 3]' |+-------------------------+

3.1.4 CONVERT

CONVERT(json_string,JSON)

mysql> select CONVERT(’{'mail': '[email protected]', 'name': 'Amy'}’,JSON);+----------------------------------------------------------+| CONVERT(’{'mail': '[email protected]', 'name': 'Amy'}’,JSON) |+----------------------------------------------------------+| {'mail': '[email protected]', 'name': 'Amy'} |+----------------------------------------------------------+3.2 查詢函數

3.2.1 JSON_CONTAINS

JSON_CONTAINS(json_doc, val[, path])

查詢json文檔是否在指定path包含指定的數據,包含則返回1,否則返回0。如果有參數為NULL或path不存在,則返回NULL。

mysql> SET @j = ’{'a': 1, 'b': 2, 'c': {'d': 4}}’;mysql> SET @j2 = ’1’;mysql> SELECT JSON_CONTAINS(@j, @j2, ’$.a’);+-------------------------------+| JSON_CONTAINS(@j, @j2, ’$.a’) |+-------------------------------+| 1 |+-------------------------------+mysql> SELECT JSON_CONTAINS(@j, @j2, ’$.b’);+-------------------------------+| JSON_CONTAINS(@j, @j2, ’$.b’) |+-------------------------------+| 0 |+-------------------------------+ mysql> SET @j2 = ’{'d': 4}’;mysql> SELECT JSON_CONTAINS(@j, @j2, ’$.a’);+-------------------------------+| JSON_CONTAINS(@j, @j2, ’$.a’) |+-------------------------------+| 0 |+-------------------------------+mysql> SELECT JSON_CONTAINS(@j, @j2, ’$.c’);+-------------------------------+| JSON_CONTAINS(@j, @j2, ’$.c’) |+-------------------------------+| 1 |+-------------------------------+

3.2.2 JSON_CONTAINS_PATH

JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...)

查詢是否存在指定路徑,存在則返回1,否則返回0。如果有參數為NULL,則返回NULL。

one_or_all只能取值'one'或'all',one表示只要有一個存在即可;all表示所有的都存在才行。

mysql> SET @j = ’{'a': 1, 'b': 2, 'c': {'d': 4}}’;mysql> SELECT JSON_CONTAINS_PATH(@j, ’one’, ’$.a’, ’$.e’);+---------------------------------------------+| JSON_CONTAINS_PATH(@j, ’one’, ’$.a’, ’$.e’) |+---------------------------------------------+| 1 |+---------------------------------------------+mysql> SELECT JSON_CONTAINS_PATH(@j, ’all’, ’$.a’, ’$.e’);+---------------------------------------------+| JSON_CONTAINS_PATH(@j, ’all’, ’$.a’, ’$.e’) |+---------------------------------------------+| 0 |+---------------------------------------------+mysql> SELECT JSON_CONTAINS_PATH(@j, ’one’, ’$.c.d’);+----------------------------------------+| JSON_CONTAINS_PATH(@j, ’one’, ’$.c.d’) |+----------------------------------------+| 1 |+----------------------------------------+mysql> SELECT JSON_CONTAINS_PATH(@j, ’one’, ’$.a.d’);+----------------------------------------+| JSON_CONTAINS_PATH(@j, ’one’, ’$.a.d’) |+----------------------------------------+| 0 |+----------------------------------------+

3.2.3 JSON_EXTRACT

JSON_EXTRACT(json_doc, path[, path] ...)

從json文檔里抽取數據。如果有參數有NULL或path不存在,則返回NULL。如果抽取出多個path,則返回的數據封閉在一個json array里。

mysql> SELECT JSON_EXTRACT(’[10, 20, [30, 40]]’, ’$[1]’);+--------------------------------------------+| JSON_EXTRACT(’[10, 20, [30, 40]]’, ’$[1]’) |+--------------------------------------------+| 20 |+--------------------------------------------+mysql> SELECT JSON_EXTRACT(’[10, 20, [30, 40]]’, ’$[1]’, ’$[0]’);+----------------------------------------------------+| JSON_EXTRACT(’[10, 20, [30, 40]]’, ’$[1]’, ’$[0]’) |+----------------------------------------------------+| [20, 10] |+----------------------------------------------------+mysql> SELECT JSON_EXTRACT(’[10, 20, [30, 40]]’, ’$[2][*]’);+-----------------------------------------------+| JSON_EXTRACT(’[10, 20, [30, 40]]’, ’$[2][*]’) |+-----------------------------------------------+| [30, 40] |+-----------------------------------------------+

在MySQL 5.7.9+里可以用'->'替代。

mysql> SELECT c, JSON_EXTRACT(c, '$.id'), g > FROM jemp > WHERE JSON_EXTRACT(c, '$.id') > 1 > ORDER BY JSON_EXTRACT(c, '$.name');+-------------------------------+-----------+------+| c | c->'$.id' | g |+-------------------------------+-----------+------+| {'id': '3', 'name': 'Barney'} | '3' | 3 || {'id': '4', 'name': 'Betty'} | '4' | 4 || {'id': '2', 'name': 'Wilma'} | '2' | 2 |+-------------------------------+-----------+------+3 rows in set (0.00 sec) mysql> SELECT c, c->'$.id', g > FROM jemp > WHERE c->'$.id' > 1 > ORDER BY c->'$.name';+-------------------------------+-----------+------+| c | c->'$.id' | g |+-------------------------------+-----------+------+| {'id': '3', 'name': 'Barney'} | '3' | 3 || {'id': '4', 'name': 'Betty'} | '4' | 4 || {'id': '2', 'name': 'Wilma'} | '2' | 2 |+-------------------------------+-----------+------+3 rows in set (0.00 sec)

在MySQL 5.7.13+,還可以用'->>'表示去掉抽取結果的'號,下面三種效果是一樣的:

JSON_UNQUOTE( JSON_EXTRACT(column, path) ) JSON_UNQUOTE(column -> path) column->>path

mysql> SELECT * FROM jemp WHERE g > 2;+-------------------------------+------+| c | g |+-------------------------------+------+| {'id': '3', 'name': 'Barney'} | 3 || {'id': '4', 'name': 'Betty'} | 4 |+-------------------------------+------+2 rows in set (0.01 sec) mysql> SELECT c->’$.name’ AS name -> FROM jemp WHERE g > 2;+----------+| name |+----------+| 'Barney' || 'Betty' |+----------+2 rows in set (0.00 sec) mysql> SELECT JSON_UNQUOTE(c->’$.name’) AS name -> FROM jemp WHERE g > 2;+--------+| name |+--------+| Barney || Betty |+--------+2 rows in set (0.00 sec) mysql> SELECT c->>’$.name’ AS name -> FROM jemp WHERE g > 2;+--------+| name |+--------+| Barney || Betty |+--------+2 rows in set (0.00 sec)

3.2.4 JSON_KEYS

JSON_KEYS(json_doc[, path])

獲取json文檔在指定路徑下的所有鍵值,返回一個json array。如果有參數為NULL或path不存在,則返回NULL。

mysql> SELECT JSON_KEYS(’{'a': 1, 'b': {'c': 30}}’);+---------------------------------------+| JSON_KEYS(’{'a': 1, 'b': {'c': 30}}’) |+---------------------------------------+| ['a', 'b'] |+---------------------------------------+mysql> SELECT JSON_KEYS(’{'a': 1, 'b': {'c': 30}}’, ’$.b’);+----------------------------------------------+| JSON_KEYS(’{'a': 1, 'b': {'c': 30}}’, ’$.b’) |+----------------------------------------------+| ['c'] |+----------------------------------------------+

3.2.5 JSON_SEARCH

JSON_SEARCH(json_doc, one_or_all, search_str[, escape_char[, path] ...])

查詢包含指定字符串的paths,并作為一個json array返回。如果有參數為NUL或path不存在,則返回NULL。

one_or_all:'one'表示查詢到一個即返回;'all'表示查詢所有。 search_str:要查詢的字符串。 可以用LIKE里的’%’或‘_’匹配。 path:在指定path下查。

mysql> SET @j = ’['abc', [{'k': '10'}, 'def'], {'x':'abc'}, {'y':'bcd'}]’; mysql> SELECT JSON_SEARCH(@j, ’one’, ’abc’);+-------------------------------+| JSON_SEARCH(@j, ’one’, ’abc’) |+-------------------------------+| '$[0]' |+-------------------------------+ mysql> SELECT JSON_SEARCH(@j, ’all’, ’abc’);+-------------------------------+| JSON_SEARCH(@j, ’all’, ’abc’) |+-------------------------------+| ['$[0]', '$[2].x'] |+-------------------------------+ mysql> SELECT JSON_SEARCH(@j, ’all’, ’ghi’);+-------------------------------+| JSON_SEARCH(@j, ’all’, ’ghi’) |+-------------------------------+| NULL |+-------------------------------+ mysql> SELECT JSON_SEARCH(@j, ’all’, ’10’);+------------------------------+| JSON_SEARCH(@j, ’all’, ’10’) |+------------------------------+| '$[1][0].k' |+------------------------------+ mysql> SELECT JSON_SEARCH(@j, ’all’, ’10’, NULL, ’$’);+-----------------------------------------+| JSON_SEARCH(@j, ’all’, ’10’, NULL, ’$’) |+-----------------------------------------+| '$[1][0].k' |+-----------------------------------------+ mysql> SELECT JSON_SEARCH(@j, ’all’, ’10’, NULL, ’$[*]’);+--------------------------------------------+| JSON_SEARCH(@j, ’all’, ’10’, NULL, ’$[*]’) |+--------------------------------------------+| '$[1][0].k'|+--------------------------------------------+ mysql> SELECT JSON_SEARCH(@j, ’all’, ’10’, NULL, ’$**.k’);+---------------------------------------------+| JSON_SEARCH(@j, ’all’, ’10’, NULL, ’$**.k’) |+---------------------------------------------+| '$[1][0].k' |+---------------------------------------------+ mysql> SELECT JSON_SEARCH(@j, ’all’, ’10’, NULL, ’$[*][0].k’);+-------------------------------------------------+| JSON_SEARCH(@j, ’all’, ’10’, NULL, ’$[*][0].k’) |+-------------------------------------------------+| '$[1][0].k' |+-------------------------------------------------+ mysql> SELECT JSON_SEARCH(@j, ’all’, ’10’, NULL, ’$[1]’);+--------------------------------------------+| JSON_SEARCH(@j, ’all’, ’10’, NULL, ’$[1]’) |+--------------------------------------------+| '$[1][0].k'|+--------------------------------------------+ mysql> SELECT JSON_SEARCH(@j, ’all’, ’10’, NULL, ’$[1][0]’);+-----------------------------------------------+| JSON_SEARCH(@j, ’all’, ’10’, NULL, ’$[1][0]’) |+-----------------------------------------------+| '$[1][0].k' |+-----------------------------------------------+ mysql> SELECT JSON_SEARCH(@j, ’all’, ’abc’, NULL, ’$[2]’);+---------------------------------------------+| JSON_SEARCH(@j, ’all’, ’abc’, NULL, ’$[2]’) |+---------------------------------------------+| '$[2].x' |+---------------------------------------------+ mysql> SELECT JSON_SEARCH(@j, ’all’, ’%a%’);+-------------------------------+| JSON_SEARCH(@j, ’all’, ’%a%’) |+-------------------------------+| ['$[0]', '$[2].x'] |+-------------------------------+ mysql> SELECT JSON_SEARCH(@j, ’all’, ’%b%’);+-------------------------------+| JSON_SEARCH(@j, ’all’, ’%b%’) |+-------------------------------+| ['$[0]', '$[2].x', '$[3].y'] |+-------------------------------+ mysql> SELECT JSON_SEARCH(@j, ’all’, ’%b%’, NULL, ’$[0]’);+---------------------------------------------+| JSON_SEARCH(@j, ’all’, ’%b%’, NULL, ’$[0]’) |+---------------------------------------------+| '$[0]' |+---------------------------------------------+ mysql> SELECT JSON_SEARCH(@j, ’all’, ’%b%’, NULL, ’$[2]’);+---------------------------------------------+| JSON_SEARCH(@j, ’all’, ’%b%’, NULL, ’$[2]’) |+---------------------------------------------+| '$[2].x' |+---------------------------------------------+ mysql> SELECT JSON_SEARCH(@j, ’all’, ’%b%’, NULL, ’$[1]’);+---------------------------------------------+| JSON_SEARCH(@j, ’all’, ’%b%’, NULL, ’$[1]’) |+---------------------------------------------+| NULL |+---------------------------------------------+ mysql> SELECT JSON_SEARCH(@j, ’all’, ’%b%’, ’’, ’$[1]’);+-------------------------------------------+| JSON_SEARCH(@j, ’all’, ’%b%’, ’’, ’$[1]’) |+-------------------------------------------+| NULL |+-------------------------------------------+ mysql> SELECT JSON_SEARCH(@j, ’all’, ’%b%’, ’’, ’$[3]’);+-------------------------------------------+| JSON_SEARCH(@j, ’all’, ’%b%’, ’’, ’$[3]’) |+-------------------------------------------+| '$[3].y' |+-------------------------------------------+3.3 修改函數

3.3.1 JSON_APPEND/JSON_ARRAY_APPEND

JSON_ARRAY_APPEND(json_doc, path, val[, path, val] ...)

在指定path的json array尾部追加val。如果指定path是一個json object,則將其封裝成一個json array再追加。如果有參數為NULL,則返回NULL。

mysql> SET @j = ’['a', ['b', 'c'], 'd']’;mysql> SELECT JSON_ARRAY_APPEND(@j, ’$[1]’, 1);+----------------------------------+| JSON_ARRAY_APPEND(@j, ’$[1]’, 1) |+----------------------------------+| ['a', ['b', 'c', 1], 'd'] |+----------------------------------+mysql> SELECT JSON_ARRAY_APPEND(@j, ’$[0]’, 2);+----------------------------------+| JSON_ARRAY_APPEND(@j, ’$[0]’, 2) |+----------------------------------+| [['a', 2], ['b', 'c'], 'd'] |+----------------------------------+mysql> SELECT JSON_ARRAY_APPEND(@j, ’$[1][0]’, 3);+-------------------------------------+| JSON_ARRAY_APPEND(@j, ’$[1][0]’, 3) |+-------------------------------------+| ['a', [['b', 3], 'c'], 'd'] |+-------------------------------------+ mysql> SET @j = ’{'a': 1, 'b': [2, 3], 'c': 4}’;mysql> SELECT JSON_ARRAY_APPEND(@j, ’$.b’, ’x’);+------------------------------------+| JSON_ARRAY_APPEND(@j, ’$.b’, ’x’) |+------------------------------------+| {'a': 1, 'b': [2, 3, 'x'], 'c': 4} |+------------------------------------+mysql> SELECT JSON_ARRAY_APPEND(@j, ’$.c’, ’y’);+--------------------------------------+| JSON_ARRAY_APPEND(@j, ’$.c’, ’y’) |+--------------------------------------+| {'a': 1, 'b': [2, 3], 'c': [4, 'y']} |+--------------------------------------+ mysql> SET @j = ’{'a': 1}’;mysql> SELECT JSON_ARRAY_APPEND(@j, ’$’, ’z’);+---------------------------------+| JSON_ARRAY_APPEND(@j, ’$’, ’z’) |+---------------------------------+| [{'a': 1}, 'z'] |+---------------------------------+

3.3.2 JSON_ARRAY_INSERT

JSON_ARRAY_INSERT(json_doc, path, val[, path, val] ...)

在path指定的json array元素插入val,原位置及以右的元素順次右移。如果path指定的數據非json array元素,則略過此val;如果指定的元素下標超過json array的長度,則插入尾部。

mysql> SET @j = ’['a', {'b': [1, 2]}, [3, 4]]’;mysql> SELECT JSON_ARRAY_INSERT(@j, ’$[1]’, ’x’);+------------------------------------+| JSON_ARRAY_INSERT(@j, ’$[1]’, ’x’) |+------------------------------------+| ['a', 'x', {'b': [1, 2]}, [3, 4]] |+------------------------------------+mysql> SELECT JSON_ARRAY_INSERT(@j, ’$[100]’, ’x’);+--------------------------------------+| JSON_ARRAY_INSERT(@j, ’$[100]’, ’x’) |+--------------------------------------+| ['a', {'b': [1, 2]}, [3, 4], 'x'] |+--------------------------------------+mysql> SELECT JSON_ARRAY_INSERT(@j, ’$[1].b[0]’, ’x’);+-----------------------------------------+| JSON_ARRAY_INSERT(@j, ’$[1].b[0]’, ’x’) |+-----------------------------------------+| ['a', {'b': ['x', 1, 2]}, [3, 4]] |+-----------------------------------------+mysql> SELECT JSON_ARRAY_INSERT(@j, ’$[2][1]’, ’y’);+---------------------------------------+| JSON_ARRAY_INSERT(@j, ’$[2][1]’, ’y’) |+---------------------------------------+| ['a', {'b': [1, 2]}, [3, 'y', 4]] |+---------------------------------------+mysql> SELECT JSON_ARRAY_INSERT(@j, ’$[0]’, ’x’, ’$[2][1]’, ’y’);+----------------------------------------------------+| JSON_ARRAY_INSERT(@j, ’$[0]’, ’x’, ’$[2][1]’, ’y’) |+----------------------------------------------------+| ['x', 'a', {'b': [1, 2]}, [3, 4]] |+----------------------------------------------------+

3.3.3 JSON_INSERT/JSON_REPLACE/JSON_SET

JSON_INSERT(json_doc, path, val[, path, val] ...)

在指定path下插入數據,如果path已存在,則忽略此val(不存在才插入)。

mysql> SET @j = ’{ 'a': 1, 'b': [2, 3]}’;mysql> SELECT JSON_INSERT(@j, ’$.a’, 10, ’$.c’, ’[true, false]’);+----------------------------------------------------+| JSON_INSERT(@j, ’$.a’, 10, ’$.c’, ’[true, false]’) |+----------------------------------------------------+| {'a': 1, 'b': [2, 3], 'c': '[true, false]'} |+----------------------------------------------------+

JSON_REPLACE(json_doc, path, val[, path, val] ...)

替換指定路徑的數據,如果某個路徑不存在則略過(存在才替換)。如果有參數為NULL,則返回NULL。

mysql> SET @j = ’{ 'a': 1, 'b': [2, 3]}’;mysql> SELECT JSON_REPLACE(@j, ’$.a’, 10, ’$.c’, ’[true, false]’);+-----------------------------------------------------+| JSON_REPLACE(@j, ’$.a’, 10, ’$.c’, ’[true, false]’) |+-----------------------------------------------------+| {'a': 10, 'b': [2, 3]} |+-----------------------------------------------------+

JSON_SET(json_doc, path, val[, path, val] ...)

設置指定路徑的數據(不管是否存在)。如果有參數為NULL,則返回NULL。

mysql> SET @j = ’{ 'a': 1, 'b': [2, 3]}’;mysql> SELECT JSON_SET(@j, ’$.a’, 10, ’$.c’, ’[true, false]’);+-------------------------------------------------+| JSON_SET(@j, ’$.a’, 10, ’$.c’, ’[true, false]’) |+-------------------------------------------------+| {'a': 10, 'b': [2, 3], 'c': '[true, false]'} |+-------------------------------------------------+mysql> SELECT JSON_INSERT(@j, ’$.a’, 10, ’$.c’, ’[true, false]’);+----------------------------------------------------+| JSON_INSERT(@j, ’$.a’, 10, ’$.c’, ’[true, false]’) |+----------------------------------------------------+| {'a': 1, 'b': [2, 3], 'c': '[true, false]'} |+----------------------------------------------------+mysql> SELECT JSON_REPLACE(@j, ’$.a’, 10, ’$.c’, ’[true, false]’);+-----------------------------------------------------+| JSON_REPLACE(@j, ’$.a’, 10, ’$.c’, ’[true, false]’) |+-----------------------------------------------------+| {'a': 10, 'b': [2, 3]} |+-----------------------------------------------------+

3.3.4 JSON_MERGE

JSON_MERGE(json_doc, json_doc[, json_doc] ...)

merge多個json文檔。規則如下:

如果都是json array,則結果自動merge為一個json array; 如果都是json object,則結果自動merge為一個json object; 如果有多種類型,則將非json array的元素封裝成json array再按照規則一進行mege。

mysql> SELECT JSON_MERGE(’[1, 2]’, ’[true, false]’);+---------------------------------------+| JSON_MERGE(’[1, 2]’, ’[true, false]’) |+---------------------------------------+| [1, 2, true, false] |+---------------------------------------+mysql> SELECT JSON_MERGE(’{'name': 'x'}’, ’{'id': 47}’);+-------------------------------------------+| JSON_MERGE(’{'name': 'x'}’, ’{'id': 47}’) |+-------------------------------------------+| {'id': 47, 'name': 'x'} |+-------------------------------------------+mysql> SELECT JSON_MERGE(’1’, ’true’);+-------------------------+| JSON_MERGE(’1’, ’true’) |+-------------------------+| [1, true]|+-------------------------+mysql> SELECT JSON_MERGE(’[1, 2]’, ’{'id': 47}’);+------------------------------------+| JSON_MERGE(’[1, 2]’, ’{'id': 47}’) |+------------------------------------+| [1, 2, {'id': 47}] |+------------------------------------+

3.3.5 JSON_REMOVE

JSON_REMOVE(json_doc, path[, path] ...)

移除指定路徑的數據,如果某個路徑不存在則略過此路徑。如果有參數為NULL,則返回NULL。

mysql> SET @j = ’['a', ['b', 'c'], 'd']’;mysql> SELECT JSON_REMOVE(@j, ’$[1]’);+-------------------------+| JSON_REMOVE(@j, ’$[1]’) |+-------------------------+| ['a', 'd'] |+-------------------------+

3.3.6 JSON_UNQUOTE

JSON_UNQUOTE(val)

去掉val的引號。如果val為NULL,則返回NULL。

mysql> SET @j = ’'abc'’;mysql> SELECT @j, JSON_UNQUOTE(@j);+-------+------------------+| @j | JSON_UNQUOTE(@j) |+-------+------------------+| 'abc' | abc |+-------+------------------+mysql> SET @j = ’[1, 2, 3]’;mysql> SELECT @j, JSON_UNQUOTE(@j);+-----------+------------------+| @j | JSON_UNQUOTE(@j) |+-----------+------------------+| [1, 2, 3] | [1, 2, 3] |+-----------+------------------+3.4 JSON特性查詢

3.4.1 JSON_DEEPTH

JSON_DEPTH(json_doc)

獲取json文檔的深度。如果參數為NULL,則返回NULL。

空的json array、json object或標量的深度為1。

mysql> SELECT JSON_DEPTH(’{}’), JSON_DEPTH(’[]’), JSON_DEPTH(’true’);+------------------+------------------+--------------------+| JSON_DEPTH(’{}’) | JSON_DEPTH(’[]’) | JSON_DEPTH(’true’) |+------------------+------------------+--------------------+|1 |1 | 1 |+------------------+------------------+--------------------+mysql> SELECT JSON_DEPTH(’[10, 20]’), JSON_DEPTH(’[[], {}]’);+------------------------+------------------------+| JSON_DEPTH(’[10, 20]’) | JSON_DEPTH(’[[], {}]’) |+------------------------+------------------------+| 2 | 2 |+------------------------+------------------------+mysql> SELECT JSON_DEPTH(’[10, {'a': 20}]’);+-------------------------------+| JSON_DEPTH(’[10, {'a': 20}]’) |+-------------------------------+| 3 |+-------------------------------+

3.4.2 JSON_LENGTH

JSON_LENGTH(json_doc[, path])

獲取指定路徑下的長度。如果參數為NULL,則返回NULL。 

長度的計算規則:

標量的長度為1; json array的長度為元素的個數; json object的長度為key的個數。

mysql> SELECT JSON_LENGTH(’[1, 2, {'a': 3}]’);+---------------------------------+| JSON_LENGTH(’[1, 2, {'a': 3}]’) |+---------------------------------+|3 |+---------------------------------+mysql> SELECT JSON_LENGTH(’{'a': 1, 'b': {'c': 30}}’);+-----------------------------------------+| JSON_LENGTH(’{'a': 1, 'b': {'c': 30}}’) |+-----------------------------------------+| 2 |+-----------------------------------------+mysql> SELECT JSON_LENGTH(’{'a': 1, 'b': {'c': 30}}’, ’$.b’);+------------------------------------------------+| JSON_LENGTH(’{'a': 1, 'b': {'c': 30}}’, ’$.b’) |+------------------------------------------------+| 1 |+------------------------------------------------+

3.4.3 JSON_TYPE

JSON_TYPE(json_val)

獲取json文檔的具體類型。如果參數為NULL,則返回NULL。

3.4.4 JSON_VALID

JSON_VALID(val)

判斷val是否為有效的json格式,是為1,不是為0。如果參數為NUL,則返回NULL。

mysql> SELECT JSON_VALID(’{'a': 1}’);+------------------------+| JSON_VALID(’{'a': 1}’) |+------------------------+| 1 |+------------------------+mysql> SELECT JSON_VALID(’hello’), JSON_VALID(’'hello'’);+---------------------+-----------------------+| JSON_VALID(’hello’) | JSON_VALID(’'hello'’) |+---------------------+-----------------------+| 0 | 1 |+---------------------+-----------------------+

到此這篇關于MySQL處理JSON常見函數的使用的文章就介紹到這了,更多相關MySQL JSON常見函數內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: MySQL 數據庫
相關文章:
主站蜘蛛池模板: 欧美国产日本精品一区二区三区 | 久久黄色影院 | 91社区视频 | 99久久精品全部 | 久久无码精品一区二区三区 | 国产一区二区在线播放 | 国产精品性视频免费播放 | 国产高清一区二区三区四区 | 91免费国产高清观看 | 久久精品免视着国产成人 | 国产不卡精品一区二区三区 | 在线播放成人高清免费视频 | 日本美女视频韩国视频网站免费 | 国产亚洲精品一区二区久久 | 欧美精品国产制服第一页 | 成人久久18免费网站 | 欧美专区视频 | 国产成人做受免费视频 | 99热碰 | 亚洲国产精品久久久天堂 | 男人天堂国产 | 一级特级aaa毛片 | 欧美成人h版在线观看 | 亚洲成年www | 欧美一欧美一级毛片 | 国产成人久久精品麻豆二区 | 欧美视频一区二区专区 | 成人国产精品免费软件 | 国内精品小视频福利网址 | 亚洲制服欧美自拍另类 | 日鲁夜鲁鲁狠狠综合视频 | 亚洲国产一区二区a毛片日本 | 夜鲁夜鲁夜鲁在线观看福利 | 国产成人综合一区精品 | 一区二区三区网站在线免费线观看 | 亚洲欧美综合一区二区三区四区 | 欧美国产视频 | 欧美一区亚洲 | 国产精品久久久久国产精品三级 | 日本人成18在线播放 | 日韩在线国产精品 |