最右邊的數組元素。MySQL支持last關鍵字,做爲數組中最後一個元素的索引的同義詞。last - N 形式的表達式可用於相對尋址和範圍定義,以下所示:html
若是不是針對數組計算路徑,則求值結果與將該值包裝在單個元素數組中的結果相同:mysql
可使用帶有JSON列標識符和JSON路徑表達式 column->path 的形式,用做JSON_EXTRACT(column, path)的同義詞。sql
有些函數獲取現有的JSON文檔,以某種方式對其進行修改,而後返回修改後的文檔。路徑表達式指示文檔中要進行更改的位置。例如,JSON_SET()、JSON_INSERT()和JSON_REPLACE()函數都接受一個JSON文檔,外加一個或多個成對兒的路徑值,這些路徑值描述了在何處修改文檔以及要改爲什麼值。這些函數在處理文檔中現有值和不存在值的方式上有所不一樣。json
考慮一下這個文件:數組
JSON_SET()替換已存在路徑的值,併爲不存在的路徑添加值:ide
在本例中,路徑$[1].b[0]選擇一個現有值(true),該值將替換爲路徑參數(1)後面的值。路徑$[2][2]不存在,所以相應的值(2)將添加到由$[2]選擇的值中。函數
JSON_INSERT()添加新值,但不替換現有值:編碼
JSON_REPLACE() 替換現有值並忽略新值:3d
成對兒路徑值從左到右計算。經過計算一對兒路徑值生成文檔,這個文檔又成爲下一對路徑值計算的基礎。htm
JSON_REMOVE()接受一個JSON文檔和一個或多個指定要從文檔中刪除的值的路徑。返回值爲原始文檔減去文檔中存在的路徑選擇的值:
路徑具備如下效果:
●$[2]匹配[10,20]並將其刪除。
●$[1].b[1]的第一個實例在b元素中匹配false並將其刪除。
●$[1].b[1]的第二個實例與任何內容都不匹配:該元素已被刪除,路徑再也不存在,因此不起做用。
JSON路徑語法
MySQL支持的許多JSON函數須要一個路徑表達式來標識JSON文檔中的特定元素。路徑由路徑的範圍和一個或多個路徑分支組成。對於MySQL JSON函數中使用的路徑,範圍始終是要搜索或以其餘方式操做的文檔,用前導的$字符表示。路徑分支由句點字符(.)分隔。數組中的成員用[N]表示,其中N是非負整數。鍵的名稱必須是帶有雙引號的字符串或有效的ECMAScript標識符(請參閱ECMAScript語言規範中的標識符名稱和標識符)。路徑表達式,就像JSON文本,應使用ascii、utf8或utf8mb4字符集進行編碼。其餘字符編碼被隱式強制爲utf8mb4。完整的語法以下所示:
如前所述,在MySQL中,路徑的範圍一直是被操做的文檔,用$表示。能夠在JSON路徑表達式中將'$'看成文檔的同義詞。
通配符 * 和 **標記的用法以下:
●. * 表示對象中全部成員的值。
●[ * ] 表示數組中全部成員的值。
●[prefix]suffix表示以prefix開頭、以suffix結尾的全部路徑。prefix是可選的,suffix是必需的;換句話說,路徑不能以結尾。
另外,路徑不能包含序列***。
有關路徑語法示例,請參考將路徑做爲參數的各類JSON函數的說明,例如JSON_CONTAINS_PATH()、JSON_SET()和JSON_REPLACE()。有關使用*和**通配符的示例,請參閱JSON_SEARCH()函數的說明。
MySQL 8.0.2及更高版本還支持JSON數組使用 to 關鍵字得到子集(例如 $[2 to 10]),last關鍵字做爲數組最右邊元素同義詞這些範圍表示法。