天天看點

mysql 封裝json資料類型_MySQL資料類型 - JSON資料類型 (3)

最右邊的數組元素。MySQL支援last關鍵字,作為數組中最後一個元素的索引的同義詞。last - N 形式的表達式可用于相對尋址和範圍定義,如下所示:

mysql 封裝json資料類型_MySQL資料類型 - JSON資料類型 (3)

如果不是針對數組計算路徑,則求值結果與将該值包裝在單個元素數組中的結果相同:

mysql 封裝json資料類型_MySQL資料類型 - JSON資料類型 (3)

可以使用帶有JSON列辨別符和JSON路徑表達式 column->path 的形式,用作JSON_EXTRACT(column, path)的同義詞。

有些函數擷取現有的JSON文檔,以某種方式對其進行修改,然後傳回修改後的文檔。路徑表達式訓示文檔中要進行更改的位置。例如,JSON_SET()、JSON_INSERT()和JSON_REPLACE()函數都接受一個JSON文檔,外加一個或多個成對兒的路徑值,這些路徑值描述了在何處修改文檔以及要改成什麼值。這些函數在處理文檔中現有值和不存在值的方式上有所不同。

考慮一下這個檔案:

mysql 封裝json資料類型_MySQL資料類型 - JSON資料類型 (3)

JSON_SET()替換已存在路徑的值,并為不存在的路徑添加值:

mysql 封裝json資料類型_MySQL資料類型 - JSON資料類型 (3)

在本例中,路徑$[1].b[0]選擇一個現有值(true),該值将替換為路徑參數(1)後面的值。路徑$[2][2]不存在,是以相應的值(2)将添加到由$[2]選擇的值中。

JSON_INSERT()添加新值,但不替換現有值:

mysql 封裝json資料類型_MySQL資料類型 - JSON資料類型 (3)

JSON_REPLACE() 替換現有值并忽略新值:

mysql 封裝json資料類型_MySQL資料類型 - JSON資料類型 (3)

成對兒路徑值從左到右計算。通過計算一對兒路徑值生成文檔,這個文檔又成為下一對路徑值計算的基礎。

JSON_REMOVE()接受一個JSON文檔和一個或多個指定要從文檔中删除的值的路徑。傳回值為原始文檔減去文檔中存在的路徑選擇的值:

mysql 封裝json資料類型_MySQL資料類型 - JSON資料類型 (3)

路徑具有以下效果:

●$[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資料類型_MySQL資料類型 - JSON資料類型 (3)

如前所述,在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關鍵字作為數組最右邊元素同義詞這些範圍表示法。