使用json_extract()提取嵌套json數據時,需掌握以下要點:1.路徑以$開頭,對象字段用$.字段名表示,數組元素用[索引]訪問;2.多層結構逐層展開路徑,注意點號和括號順序;3.字段名含特殊字符時需用雙引號包裹。例如提取hobbies數組第一個元素應寫為$.user.hobbies[0],處理多層嵌套時如data數組第二個對象的tags數組第二個元素寫作$.data[1].tags[1],特殊字符字段如”full name”需寫成$.user-info.”full name”或$.”user-info”.”full name”,建議通過在線工具驗證路徑準確性。
有時候解析嵌套的 JSON 數據,特別是用像 mysql 的 JSON_EXTRACT() 這類函數時,路徑寫法容易搞錯。其實只要掌握幾個關鍵點,就能準確提取想要的數據。
路徑表達式的基本結構:$.字段名[索引]
在使用 JSON_EXTRACT() 時,路徑是以 $ 開頭的,表示整個 JSON 的根。如果數據是對象(鍵值對),就用 $.字段名;如果是數組,就要用 [索引] 來訪問具體元素。
舉個例子,假設你有如下 JSON:
{ "user": { "name": "張三", "hobbies": ["籃球", "讀書", "編程"] } }
要提取 hobbies 數組里的第一個愛好,路徑應該是:
SELECT JSON_EXTRACT(json_column, '$.user.hobbies[0]');
注意幾點:
- 字段名之間用英文點號連接
- 數組索引要用方括號包裹,且從 0 開始計數
- 不管字段名是否帶下劃線或大小寫,都要原樣寫出來
多層數組嵌套:逐層展開寫路徑
如果遇到多層嵌套數組的情況,比如下面這個結構:
{ "data": [ { "id": 1, "tags": ["a", "b"] }, { "id": 2, "tags": ["c", "d"] } ] }
想提取第二個 data 元素下的 tags 第二個標簽,路徑就是:
'$.data[1].tags[1]'
說明:
- data[1] 是數組中的第二個對象(索引從 0 開始)
- 再進入 .tags[1] 就是那個對象中的第二個標簽
這種時候特別要注意括號和點號的位置,順序錯了就取不到數據。
特殊字符處理:字段名含特殊符號怎么辦?
有些 JSON 中字段名可能包含空格、連字符 – 或其他非字母字符,例如:
{ "user-info": { "full name": "李四" } }
這時候路徑要加雙引號包裹字段名:
'$.user-info."full name"'
或者也可以統一都用引號形式:
'$."user-info"."full name"'
這樣即使字段名中包含特殊字符也不會出錯。
基本上就這些常用情況。路徑寫法雖然看起來簡單,但實際操作中很容易因為少一個點、錯一個括號導致結果為空。建議每次寫完可以先用在線 JSON 提取工具驗證一下路徑是否正確,再放到 SQL 里執行。