it编程 > 编程语言 > Javascript

MySQL中的json处理相关方法详解

11人参与 2025-10-21 Javascript

起因:在使用tidb作为检查点的存储模块时,想着tidb兼容mysql,于是借用的langgraph-checkpoint-mysql插件来实现tidb。但在验证过程中发现并不如此,mysql很多处理json的语法tidb无法使用。下面介绍这些语法的功能,下一篇会介绍到底哪里不兼容。
json_table,json_unquote,json_extract,json_keys,json_arrayagg,json_array

在 mysql 中,这些 json 函数用于处理 json 类型的数据,方便对 json 数据进行提取、转换和聚合等操作。

json_table

作用:将 json 数据转换为关系表的形式,使得可以像查询普通表一样查询 json 数据中的元素,方便进行复杂的查询和分析。

案例:假设有一个 students 表,其中 courses 字段是 json 类型,存储了学生所选课程及其成绩。

create table students (
    id int primary key,
    name varchar(50),
    courses json
);
insert into students (id, name, courses) values
(1, 'alice', '[{"course": "math", "score": 90}, {"course": "english", "score": 85}]'),
(2, 'bob', '[{"course": "math", "score": 80}, {"course": "english", "score": 88}]');
-- 使用 json_table 展开 courses 字段
select 
    s.id,
    s.name,
    jt.course,
    jt.score
from 
    students s,
    json_table(
        s.courses,
        '$[*]' columns (
            course varchar(50) path '$.course',
            score int path '$.score'
        )
    ) as jt;

查询结果:

idnamecoursescore
1alicemath90
1aliceenglish85
2bobmath80
2bobenglish88
json_table(
  json_data,  -- 输入的 json 数据(可以是字段名、json 字符串或表达式)
  row_path_expression  -- 行路径表达式,指定从 json 中提取“行”的范围
  columns (
    -- 定义输出表的列结构,每个列包含:列名、数据类型、json 路径
    column1 data_type path 'json_path1',
    column2 data_type path 'json_path2',
    ...
  )
) as table_alias  -- 为转换后的表指定别名

row_path_expression:行路径表达式

columns (...):定义输出表的列结构

用于指定转换后的关系表包含哪些列,以及每个列的值从 json 中的哪个位置提取。每个列的定义格式为:列名 数据类型 path 'json路径'

json_unquote 和json_extract

json_unquote

作用:移除 json 字符串中的引号,将 json 格式的字符串转换为普通字符串。

案例:假设从 json 数据中提取出来的某个值是带引号的字符串,想要得到不带引号的内容时使用。

json_extract

作用:从 json 数据中提取指定路径的元素,可以是标量值(如字符串、数字等),也可以是 json 对象或数组。

案例:继续使用上述 students 表,查询学生 alice 的数学成绩。

查询结果:

name
john
  1. set @json_str = '{"name": "john"}';
  1. select json_unquote(json_extract(@json_str, '$.name')) as name;

这是一个查询语句,包含两个嵌套的 json 函数:

(1)json_extract(@json_str, '$.name')

(2)json_unquote(...)

(3)as name

json_keys

作用:返回 json 对象中的所有键,以 json 数组的形式呈现。

案例:假设有一个存储用户信息的 json 数据,获取其中所有的键。

set @user_info = '{"name": "tom", "age": 25, "email": "tom@example.com"}';
select json_keys(@user_info) as keys;

查询结果:

keys
[“name”, “age”, “email”]

json_arrayagg

作用:将一组值聚合为一个 json 数组,常用于分组查询中,将每组内的相关数据聚合成 json 数组形式。

案例:统计每个学生所选课程的名称,以 json 数组形式呈现。

select 
    name,
    json_arrayagg(course) as courses
from 
    students s,
    json_table(
        s.courses,
        '$[*]' columns (
            course varchar(50) path '$.course'
        )
    ) as jt
group by 
    name;

查询结果:

namecourses
alice[“math”, “english”]
bob[“math”, “english”]

json_array

作用:将一组值创建为一个 json 数组,它与 json_arrayagg 的区别在于,json_array 不是聚合函数,是直接创建数组。

案例:创建一个包含多个字符串的 json 数组。

select json_array('red', 'green', 'blue') as colors;

查询结果:

colors
[“red”, “green”, “blue”]

到此这篇关于mysql中的json处理相关方法详解的文章就介绍到这了,更多相关mysql json处理内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

您想发表意见!!点此发布评论

推荐阅读

JDK自带的jstat命令该怎么用详解

10-20

使用@RequestParam接受JSON的字符串方式

10-17

深度解析@JsonSerialize注解及其在Jackson 序列化中的应用小结

10-11

nginx状态码的使用及说明

10-03

在CentOS 7上安装Node.js 18.20.4全过程

10-03

CentOS7安装nodejs18和yarn操作实践

10-03

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论