Mysql——》提取JSON对象和数组
推荐链接:
总结——》【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;