> 技术文档 > Mysql——》提取JSON对象和数组_mysql取json

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`;

Mysql——》提取JSON对象和数组_mysql取json

1.2 提取JSON的值

JSON_EXTRACT函数用于提取JSON的值

  • $.*取所有值
  • $.key取单个值

1.2.1 提取所有key的值

-- 提取所有key的值SELECT JSON_EXTRACT(@json, \'$.*\') AS `values`;

Mysql——》提取JSON对象和数组_mysql取json

1.2.2 提取指定key的值

-- 提取指定key的值SELECT JSON_EXTRACT(@json, \'$.\"name\"\') AS extracted_name;

Mysql——》提取JSON对象和数组_mysql取json

1.2.3 提取指定key的值:去掉引号

JSON_UNQUOTE函数对单个结果进行去引号操作

-- 提取指定key的值:去掉引号SELECT JSON_UNQUOTE(JSON_EXTRACT(@json, \'$.\"name\"\')) AS extracted_name;

Mysql——》提取JSON对象和数组_mysql取json

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;

Mysql——》提取JSON对象和数组_mysql取json

2.1.2 提取所有元素:指定key的值

-- 提取所有元素:指定key的值SELECT JSON_UNQUOTE(JSON_EXTRACT(@json_array, \'$[*].\"name\"\')) AS extracted_name;

Mysql——》提取JSON对象和数组_mysql取json

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;

Mysql——》提取JSON对象和数组_mysql取json

2.1.4 提取指定索引的元素

-- 提取指定索引的元素SELECT JSON_EXTRACT(@json_array, \'$[0]\') AS element_0;-- 提取指定索引的元素中指定key的值SELECT JSON_EXTRACT(@json_array, \'$[0].\"name\"\') AS name_0;

Mysql——》提取JSON对象和数组_mysql取json

Mysql——》提取JSON对象和数组_mysql取json

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;