Mysql提取JSON對象和數(shù)組的方法示例代碼
1. JSON對象
{
"age": 11,
"name": "張三"
}
-- 定義變量json
set @json:='{"age":11,"name":"張三"}';
1.1 提取JSON的key
JSON_KEYS函數(shù)用于提取JSON的key值
-- 提取所有key SELECT JSON_KEYS(@json) AS `keys`;

1.2 提取JSON的值
JSON_EXTRACT函數(shù)用于提取JSON的值
$.*取所有值$.key取單個值
1.2.1 提取所有key的值
-- 提取所有key的值 SELECT JSON_EXTRACT(@json, '$.*') AS `values`;

1.2.2 提取指定key的值
-- 提取指定key的值 SELECT JSON_EXTRACT(@json, '$."name"') AS extracted_name;

1.2.3 提取指定key的值:去掉引號
JSON_UNQUOTE函數(shù)對單個結(jié)果進(jìn)行去引號操作
-- 提取指定key的值:去掉引號 SELECT JSON_UNQUOTE(JSON_EXTRACT(@json, '$."name"')) AS extracted_name;

2. JSON數(shù)組
[
{
"age": 11,
"name": "張三"
},
{
"age": 12,
"name": "李四"
}
]
-- 定義變量json_array
SET @json_array:='[{"age":11,"name":"張三"},{"age":12,"name":"李四"}]';
2.1 提取JSON數(shù)組的值
$[*] :JSON數(shù)組所有對象
$[0] :JSON數(shù)組第一個對象
$[*].key :JOSN數(shù)組所有對象,對應(yīng)key的值
$[0].key :JSON數(shù)組第一個對象對應(yīng)key的值
2.1.1 提取所有元素
JSON_TABLE函數(shù)將 JSON 數(shù)組展開成關(guān)系表的形式,方便獲取所有元素。
-- 提取所有元素:以表格形式展示每個對象的age和name字段
SELECT element.*
FROM
JSON_TABLE(
@json_array,
'$[*]' COLUMNS (
age INT PATH '$."age"',
name VARCHAR(255) PATH '$."name"'
)
) AS element;

2.1.2 提取所有元素:指定key的值
-- 提取所有元素:指定key的值 SELECT JSON_UNQUOTE(JSON_EXTRACT(@json_array, '$[*]."name"')) AS extracted_name;

2.1.3 提取所有元素:指定key的值用逗號分隔
-- 提取所有元素:指定key的值用逗號分隔
SELECT GROUP_CONCAT(names.name SEPARATOR ',') AS combined_names
FROM
JSON_TABLE(
@json_array,
'$[*]' COLUMNS (
name VARCHAR(255) PATH '$."name"'
)
) AS names;

2.1.4 提取指定索引的元素
-- 提取指定索引的元素 SELECT JSON_EXTRACT(@json_array, '$[0]') AS element_0; -- 提取指定索引的元素中指定key的值 SELECT JSON_EXTRACT(@json_array, '$[0]."name"') AS name_0;


3. 總結(jié)
-- 定義變量json
set @json:='{"age":11,"name":"張三"}';
-- 提取JSON的key
SELECT JSON_KEYS(@json) AS `keys`;
-- 提取所有key的值
SELECT JSON_EXTRACT(@json, '$.*') AS `values`;
-- 提取指定key的值
SELECT JSON_EXTRACT(@json, '$."name"') AS extracted_name;
-- 提取指定key的值:去掉引號
SELECT JSON_UNQUOTE(JSON_EXTRACT(@json, '$."name"')) AS extracted_name;
-- ----------------------------------------------------------------------
-- 定義變量json_array
SET @json_array:='[{"age":11,"name":"張三"},{"age":12,"name":"李四"}]';
-- 提取所有元素:以表格形式展示每個對象的age和name字段
SELECT element.*
FROM
JSON_TABLE(
@json_array,
'$[*]' COLUMNS (
age INT PATH '$."age"',
name VARCHAR(255) PATH '$."name"'
)
) AS element;
-- 提取所有元素:指定key的值
SELECT JSON_UNQUOTE(JSON_EXTRACT(@json_array, '$[*]."name"')) AS extracted_name;
-- 提取所有元素:指定key的值用逗號分隔
SELECT GROUP_CONCAT(names.name SEPARATOR ',') AS combined_names
FROM
JSON_TABLE(
@json_array,
'$[*]' COLUMNS (
name VARCHAR(255) PATH '$."name"'
)
) AS names;
-- 提取指定索引的元素
SELECT JSON_EXTRACT(@json_array, '$[0]') AS element_0;
-- 提取指定索引的元素中指定key的值
SELECT JSON_EXTRACT(@json_array, '$[0]."name"') AS name_0;
下面附一個具體的例子
假設(shè)你有一個名為users的表,其中有一個名為profile的列,該列存儲了用戶的JSON格式的個人資料:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
profile JSON
);
INSERT INTO users (name, profile) VALUES
('Alice', '{"age": 30, "hobbies": ["reading", "hiking", "coding"]}'),
('Bob', '{"age": 25, "hobbies": ["gaming", "cycling"]}'),
('Carol', '{"age": 28, "hobbies": ["painting", "traveling"]}');
-- 獲取Alice的年齡
SELECT JSON_EXTRACT(profile, '$.age') AS age FROM users WHERE name = 'Alice';
-- 獲取Bob的愛好列表
SELECT JSON_EXTRACT(profile, '$.hobbies') AS hobbies FROM users WHERE name = 'Bob';
-- 給Carol添加一個新的愛好
UPDATE users
SET profile = JSON_INSERT(profile, '$.hobbies[2]', 'swimming')
WHERE name = 'Carol';
-- 移除Alice的愛好列表中的“coding”
UPDATE users
SET profile = JSON_REMOVE(profile, '$.hobbies[2]')
WHERE name = 'Alice';
-- 檢查JSON是否有效
SELECT JSON_VALID(profile) AS is_valid FROM users;
總結(jié)
到此這篇關(guān)于Mysql提取JSON對象和數(shù)組的文章就介紹到這了,更多相關(guān)Mysql提取JSON對象和數(shù)組內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL在Linux系統(tǒng)上的完整安裝與配置流程
文章詳細(xì)介紹了在Linux系統(tǒng)中安裝和卸載MySQL或MariaDB的過程,包括切換到root用戶、檢查和卸載包、備份數(shù)據(jù)、配置源、安裝服務(wù)端和客戶端、設(shè)置密碼、檢查服務(wù)狀態(tài)以及常見問題處理等步驟,需要的朋友可以參考下2026-03-03
寶塔服務(wù)器的mysql數(shù)據(jù)庫自動備份到gitee項目
文章介紹了一個開源腳本,用于自動備份寶塔服務(wù)器上的所有數(shù)據(jù)庫,并將備份文件上傳到Gitee項目中,腳本支持多服務(wù)器數(shù)據(jù)信息備份,并且可以定時執(zhí)行備份任務(wù)2025-12-12
一文詳解MySQL為什么要ONLY_FULL_GROUP_BY嚴(yán)格化
MySQL中的ONLY_FULL_GROUP_BY是SQL標(biāo)準(zhǔn)模式(SQL_MODE)中一個極為關(guān)鍵且常被開發(fā)者誤解的嚴(yán)格校驗機(jī)制,這篇文章主要介紹了MySQL為什么要ONLY_FULL_GROUP_BY嚴(yán)格化的相關(guān)資料,需要的朋友可以參考下2026-04-04
mysql?子查詢的概述和分類及單行子查詢功能實現(xiàn)
本文詳細(xì)介紹了MySQL的子查詢概念和應(yīng)用,解釋了子查詢是在主查詢中嵌套另一個查詢,包括外查詢和內(nèi)查詢,并從多個角度進(jìn)行分類,文章還深入探討了子查詢的編寫技巧和使用場景,對于學(xué)習(xí)和應(yīng)用MySQL的人來說,這是一篇非常有價值的指南2024-10-10

