推荐链接:
    总结——》【Java】
    总结——》【Mysql】
    总结——》【Redis】
    总结——》【Kafka】
    总结——》【Spring】
    总结——》【SpringBoot】
    总结——》【MyBatis、MyBatis-Plus】
    总结——》【Linux】
    总结——》【MongoDB】
    总结——》【Elasticsearch】

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;

更多推荐