Mysql——》提取JSON对象和数组_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\": \"张三\"}
-- 定义变量jsonset @json:=\'{\"age\":11,\"name\":\"张三\"}\';
1.1 提取JSON的key
JSON_KEYS
函数用于提取JSON的key值
-- 提取所有keySELECT 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_arraySET @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_namesFROM 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. 总结
-- 定义变量jsonset @json:=\'{\"age\":11,\"name\":\"张三\"}\';-- 提取JSON的keySELECT 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_arraySET @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_namesFROM 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;