在處理mysql 有存儲的json字段,需要提取時候發現JSON_EXTRACT函數,發現此函數提取后會帶有引號,組合使用JSON_UNQUOTE 可去掉引號!
JSON_EXTRACT 函數概述
JSON_EXTRACT是MySQL中用于從JSON文檔中提取數據的函數,語法為JSON_EXTRACT(json_doc, path[, path]...)
。它支持JSON路徑表達式,返回匹配路徑的數據。MySQL 5.7及以上版本支持該函數。
基本語法
JSON_EXTRACT(json_doc, path)
json_doc
: 包含JSON數據的列或字符串。path
: JSON路徑表達式,如$.key
或$[index]
。
路徑表達式示例
提取JSON對象中的值:
SELECT JSON_EXTRACT('{"name": "John", "age": 30}', '$.name');
-- 返回: "John"
提取JSON數組中的元素:
SELECT JSON_EXTRACT('["apple", "banana", "cherry"]', '$[1]');
-- 返回: "banana"
提取嵌套數據
對于嵌套JSON結構,路徑表達式可多層訪問:
SELECT JSON_EXTRACT('{"person": {"name": "Alice", "age": 25}}', '$.person.name');
-- 返回: "Alice"
提取多個路徑
函數支持同時提取多個路徑,返回結果以JSON數組形式呈現:
SELECT JSON_EXTRACT('{"a": 1, "b": 2}', '$.a', '$.b');
-- 返回: [1, 2]
簡化寫法:->
操作符
MySQL提供了->
操作符作為JSON_EXTRACT
的簡寫:
SELECT column_name->'$.key' FROM table_name;
-- 等效于: JSON_EXTRACT(column_name, '$.key')
注意事項
- 路徑表達式區分大小寫。
- 路徑不存在時返回
NULL
。 - 提取的數據類型與JSON文檔一致(如字符串帶引號)。
- 需確保
json_doc
為有效JSON格式,否則可能報錯。
實際應用示例
假設表users
有JSON列profile
:
{"name": "Tom","contacts": {"email": "tom@example.com","phone": "123456789"}
}
查詢電子郵件:
SELECT JSON_EXTRACT(profile, '$.contacts.email') FROM users;
-- 或使用簡寫:
SELECT profile->'$.contacts.email' FROM users;
與JSON_UNQUOTE
結合使用
若需去除提取結果的引號(如字符串類型),可搭配JSON_UNQUOTE
:
SELECT JSON_UNQUOTE(JSON_EXTRACT('{"name": "John"}', '$.name'));
-- 返回: John(不帶引號)
該函數在MySQL的JSON數據處理中廣泛用于字段提取和嵌套查詢。