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ù)對單個結果進行去引號操作
-- 提取指定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ù)組所有對象,對應key的值
$[0].key :JSON數(shù)組第一個對象對應key的值
2.1.1 提取所有元素
JSON_TABLE函數(shù)將 JSON 數(shù)組展開成關系表的形式,方便獲取所有元素。
-- 提取所有元素:以表格形式展示每個對象的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. 總結
-- 定義變量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;
下面附一個具體的例子
假設你有一個名為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;
總結
到此這篇關于Mysql提取JSON對象和數(shù)組的文章就介紹到這了,更多相關Mysql提取JSON對象和數(shù)組內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
linux下啟動或者關閉MySQL數(shù)據(jù)庫的多種方式
,在Linux服務器上管理MySQL服務是一個基本的運維任務,下面這篇文章主要給大家介紹了關于linux下啟動或者關閉MySQL數(shù)據(jù)庫的多種方式,文中通過代碼以及圖文介紹的非常詳細,需要的朋友可以參考下2024-06-06
Mysql數(shù)據(jù)庫函數(shù)之函數(shù)的用法小結
函數(shù)只是對查詢結果中的數(shù)據(jù)進行處理,不會改變數(shù)據(jù)庫中數(shù)據(jù)表的值,MySQL中的函數(shù)主要分為單行函數(shù)和多行函數(shù)兩大類,下面我們將詳細講解這兩大類函數(shù),這篇文章主要介紹了Mysql數(shù)據(jù)庫函數(shù)之函數(shù)的用法,需要的朋友可以參考下2022-11-11
MySQL的id關聯(lián)和索引使用的實際優(yōu)化案例
這篇文章主要介紹了MySQL的id關聯(lián)實際優(yōu)化案例,關聯(lián)和索引一直是MySQL常見的可優(yōu)化大塊兒,需要的朋友可以參考下2015-05-05
MySql中的json_extract函數(shù)處理json字段詳情
這篇文章主要介紹了MySql中的json_extract函數(shù)處理json字段詳情,利用json_extract函數(shù)可以通過key查詢value值的一個介紹展開相關內容,需要的小伙伴可以參考一下2022-06-06
MYSQL安裝時解決要輸入current root password的解決方法
在裝MYSQL的時候發(fā)現(xiàn)要輸入current root password不記得以前在電腦里裝過(你的系統(tǒng)曾經(jīng)裝過MYSQL在重裝就會要求輸入原來設定的密碼,如果是第一次安裝就不會出現(xiàn)),在網(wǎng)上苦苦搜尋解決方法。2011-07-07
Workbench通過遠程訪問mysql數(shù)據(jù)庫的方法詳解
這篇文章主要給大家介紹了Workbench通過遠程訪問mysql數(shù)據(jù)庫的相關資料,文中通過圖文介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。2017-06-06
Linux CentOS MySQL數(shù)據(jù)庫安裝配置教程
這篇文章主要為大家詳細介紹了Linux CentOS MySQL數(shù)據(jù)庫的安裝配置教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05

