Mysql——》提取JSON对象和数组
·
推荐链接:
总结——》【Java】
总结——》【Mysql】
总结——》【Redis】
总结——》【Kafka】
总结——》【Spring】
总结——》【SpringBoot】
总结——》【MyBatis、MyBatis-Plus】
总结——》【Linux】
总结——》【MongoDB】
总结——》【Elasticsearch】
Mysql——》提取JSON对象和数组
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;
更多推荐


所有评论(0)