推薦鏈接:
????總結——》【Java】
????總結——》【Mysql】
????總結——》【Redis】
????總結——》【Kafka】
????總結——》【Spring】
????總結——》【SpringBoot】
????總結——》【MyBatis、MyBatis-Plus】
????總結——》【Linux】
????總結——》【MongoDB】
????總結——》【Elasticsearch】
Mysql——》提取JSON對象和數組
- 1. JSON對象
- 1.1 提取JSON的key
- 1.2 提取JSON的值
- 1.2.1 提取所有key的值
- 1.2.2 提取指定key的值
- 1.2.3 提取指定key的值:去掉引號
- 2. JSON數組
- 2.1 提取JSON數組的值
- 2.1.1 提取所有元素
- 2.1.2 提取所有元素:指定key的值
- 2.1.3 提取所有元素:指定key的值用逗號分隔
- 2.1.4 提取指定索引的元素
- 3. 總結
1. JSON對象
{"age": 11,"name": "張三"
}
-- 定義變量json
set @json:='{"age":11,"name":"張三"}';
1.1 提取JSON的key
JSON_KEYS
函數用于提取JSON的key值
-- 提取所有key
SELECT JSON_KEYS(@json) AS `keys`;
1.2 提取JSON的值
JSON_EXTRACT
函數用于提取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
函數對單個結果進行去引號操作
-- 提取指定key的值:去掉引號
SELECT JSON_UNQUOTE(JSON_EXTRACT(@json, '$."name"')) AS extracted_name;
2. JSON數組
[{"age": 11,"name": "張三"},{"age": 12,"name": "李四"}
]
-- 定義變量json_array
SET @json_array:='[{"age":11,"name":"張三"},{"age":12,"name":"李四"}]';
2.1 提取JSON數組的值
$[*] :JSON數組所有對象
$[0] :JSON數組第一個對象
$[*].key :JOSN數組所有對象,對應key的值
$[0].key :JSON數組第一個對象對應key的值
2.1.1 提取所有元素
JSON_TABLE
函數將 JSON 數組展開成關系表的形式,方便獲取所有元素。
-- 提取所有元素:以表格形式展示每個對象的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;