JSON數(shù)組包含一個(gè)由逗號(hào)分隔的值列表,并包含在 字符[和]字符中:
創(chuàng)新互聯(lián)公司成立于2013年,我們提供高端網(wǎng)站建設(shè)公司、成都網(wǎng)站制作公司、網(wǎng)站設(shè)計(jì)、網(wǎng)站定制、全網(wǎng)整合營(yíng)銷推廣、成都小程序開發(fā)、微信公眾號(hào)開發(fā)、seo優(yōu)化服務(wù),提供專業(yè)營(yíng)銷思路、內(nèi)容策劃、視覺(jué)設(shè)計(jì)、程序開發(fā)來(lái)完成項(xiàng)目落地,為陽(yáng)光房企業(yè)提供源源不斷的流量和訂單咨詢。
JSON對(duì)象包含一組由逗號(hào)分隔的鍵值對(duì),并包含在字符{和 }字符中,JSON對(duì)象中的鍵必須是字符串:
在JSON數(shù)組元素和JSON對(duì)象鍵值中允許嵌套:
在MySQL中,JSON值被寫為字符串。MySQL解析在需要JSON值的上下文中使用的任何字符串,如果它作為JSON無(wú)效則會(huì)產(chǎn)生錯(cuò)誤。
1.JSON_ARRAY 生成json數(shù)組
JSON_ARRAY(val1,val2,val3...)生成一個(gè)包含指定元素的json數(shù)組。
2.JSON_OBJECT 生成json對(duì)象
JSON_OBJECT(key1,val1,key2,val2...) 生成一個(gè)包含指定K-V對(duì)的json object。如果有key為NULL或參數(shù)個(gè)數(shù)為奇數(shù),則拋錯(cuò)。
3.JSON_QUOTE 加"號(hào)
JSON_QUOTE(json_val) -- 將json_val用"號(hào)括起來(lái)。
2.插入記錄
創(chuàng)建一個(gè)表
插入含有json數(shù)組的記錄
插入含有json對(duì)象的記錄
路徑表達(dá)式對(duì)于提取JSON文檔的一部分或修改JSON文檔的函數(shù)很有用,以指定該文檔中的操作位置。例如,以下查詢從JSON文檔中提取具有 name 鍵的成員的值 :
路徑語(yǔ)法使用前導(dǎo) $ 字符來(lái)表示正在考慮的JSON文檔,可選地后跟選擇器,它們連續(xù)指示文檔的更多特定部分:
如果路徑表達(dá)式中的未加引號(hào)的鍵名稱不合法,則必須引用命名鍵的路徑組件。讓我們 $ 參考這個(gè)值,且密鑰都包含空格,必須引用:
可以使用帶有 to 關(guān)鍵字的范圍來(lái)指定JSON數(shù)組的子集。
last關(guān)鍵字被支撐為最后一個(gè)元素的陣列中的索引的同義詞。表單的表達(dá)式可用于相對(duì)尋址,也可用于范圍定義,如下所示: last - * N *
4.JSON_REMOVE()獲取JSON文檔和一個(gè)或多個(gè)指定要從文檔中刪除的值的路徑。返回值是原始文檔減去文檔中存在的路徑選擇的值
JSON值可以使用進(jìn)行比較 =、、=、、=、、!=、=
JSON值尚不支持以下比較運(yùn)算符和函數(shù):BETWEEN、IN()、GREATEST()、LEAST()
以上列出的比較運(yùn)算符和函數(shù)是通過(guò)將JSON值轉(zhuǎn)換為本機(jī)MySQL數(shù)值或字符串?dāng)?shù)據(jù)類型,使它們具有一致的非JSON標(biāo)量類型。
JSON值的比較發(fā)生在兩個(gè)級(jí)別。第一級(jí)比較基于比較值的JSON類型。如果類型不同,則比較結(jié)果僅由哪種類型具有更高優(yōu)先級(jí)來(lái)確定。如果這兩個(gè)值具有相同的JSON類型,則使用特定于類型的規(guī)則進(jìn)行第二級(jí)比較。
NULL-INTEGER, DOUBLE-STRING-OBJECT-ARRAY-BOOLEAN-DATE-TIME-DATETIME-OPAQUE-BIT-BLOB按此順序優(yōu)先級(jí)依次變大。
對(duì)于具有相同優(yōu)先級(jí)的JSON值,比較規(guī)則是特定于類型的:
1) BLOB、BIT、OPAQUE
比較兩個(gè)值 的第一個(gè)字節(jié),其中N是較短值中的字節(jié)數(shù)。如果N兩個(gè)值的第一個(gè)字節(jié)相同,則在較長(zhǎng)值之前排序較短的值。
2) DATETIME
表示較早時(shí)間點(diǎn)的值在表示稍后時(shí)間點(diǎn)的值之前排序。如果兩個(gè)值最初 分別來(lái)自MySQL DATETIME 和 TIMESTAMP 類型,則它們相等,如果它們代表相同的時(shí)間點(diǎn)。
3)TIME
兩個(gè)時(shí)間值中較小的一個(gè)在較大的值之前排序。
4) DATE`
較早的日期是在最近的日期之前訂購(gòu)的。
5) ARRAY
如果兩個(gè)JSON數(shù)組具有相同的長(zhǎng)度并且數(shù)組中相應(yīng)位置的值相等,則它們是相等的。如果數(shù)組不相等,則它們的順序由第一個(gè)位置中存在差異的元素確定。首先排序在該位置具有較小值的數(shù)組。如果較短數(shù)組的所有值都等于較長(zhǎng)數(shù)組中的相應(yīng)值,則首先排序較短的數(shù)組。
8) STRING
字符串在被比較的兩個(gè)字符串以詞法字典序排序 ,其中 N 是較短字符串的長(zhǎng)度。如果 N 兩個(gè)字符串的第一個(gè) 字節(jié)相同,則認(rèn)為較短的字符串小于較長(zhǎng)的字符串。
1、首先,創(chuàng)建Mysql臨時(shí)表CREATETEMPORARYTABLEtemp。
2、其次,插入臨時(shí)表數(shù)據(jù)sql。
3、然后,取臨時(shí)表插入json格式的數(shù)據(jù)表中。
4、最后,點(diǎn)擊合并,即可拆分完成。
需要更多的json函數(shù)可以訪問(wèn)以下mysql的官方文檔
官方文檔的地址
過(guò)傳統(tǒng)的B+樹索引即可實(shí)現(xiàn)對(duì)JSON格式部分屬性的快速查詢。使用方法是首先創(chuàng)建該虛擬列,然后在該虛擬列上創(chuàng)建索引
釋義 :根據(jù)json中的某一個(gè)鍵創(chuàng)建一個(gè)虛擬的列,新增的時(shí)候,不必新增這個(gè)虛擬列的數(shù)據(jù),會(huì)根據(jù)json里面的鍵自動(dòng)把數(shù)據(jù)拿過(guò)來(lái)。如果這個(gè)鍵不存在,也可以創(chuàng)建成功,只不過(guò)沒(méi)有值,不會(huì)報(bào)錯(cuò)。后期json里面新增這個(gè)鍵得話,還是根據(jù)鍵拿到值。而不必特意的向虛擬列增加值。
分類 函數(shù) 描述
創(chuàng)建json
json_array 創(chuàng)建json數(shù)組
json_object 創(chuàng)建json對(duì)象
json_quote 將json轉(zhuǎn)成json字符串類型
查詢json
json_contains 判斷是否包含某個(gè)json值
json_contains_path 判斷某個(gè)路徑下是否包json值
json_extract 提取json值
column-path json_extract的簡(jiǎn)潔寫法,MySQL 5.7.9開始支持
column-path json_unquote(column - path)的簡(jiǎn)潔寫法
json_keys 提取json中的鍵值為json數(shù)組
json_search 按給定字符串關(guān)鍵字搜索json,返回匹配的路徑
修改json
json_append 廢棄,MySQL 5.7.9開始改名為json_array_append
json_array_append 末尾添加數(shù)組元素,如果原有值是數(shù)值或json對(duì) 象,則轉(zhuǎn)成數(shù)組后,再添加元素
json_array_insert 插入數(shù)組元素
json_insert 插入值(插入新值,但不替換已經(jīng)存在的舊值)
json_merge 合并json數(shù)組或?qū)ο?/p>
json_remove 刪除json數(shù)據(jù)
json_replace 替換值(只替換已經(jīng)存在的舊值)
json_set 設(shè)置值(替換舊值,并插入不存在的新值)
json_unquote 去除json字符串的引號(hào),將值轉(zhuǎn)成string類型
返回json屬性
json_depth 返回json文檔的最大深度
json_length 返回json文檔的長(zhǎng)度
json_type 返回json值得類型
json_valid 判斷是否為合法json文檔