当前位置: 代码网 > it编程>编程语言>Javascript > Mysql提取JSON对象和数组的方法示例代码

Mysql提取JSON对象和数组的方法示例代码

2025年09月24日 Javascript 我要评论
1. json对象{ "age": 11, "name": "张三"}-- 定义变量jsonset @json:='{"age":11,"name":"张三"}';1.1 提取json的keyjs

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;

下面附一个具体的例子

假设你有一个名为users的表,其中有一个名为profile的列,该列存储了用户的json格式的个人资料:

create table users (
    id int auto_increment primary key,
    name varchar(100),
    profile json
);

insert into users (name, profile) values
('alice', '{"age": 30, "hobbies": ["reading", "hiking", "coding"]}'),
('bob', '{"age": 25, "hobbies": ["gaming", "cycling"]}'),
('carol', '{"age": 28, "hobbies": ["painting", "traveling"]}');

-- 获取alice的年龄
select json_extract(profile, '$.age') as age from users where name = 'alice';

-- 获取bob的爱好列表
select json_extract(profile, '$.hobbies') as hobbies from users where name = 'bob';

-- 给carol添加一个新的爱好
update users
set profile = json_insert(profile, '$.hobbies[2]', 'swimming')
where name = 'carol';

-- 移除alice的爱好列表中的“coding”
update users
set profile = json_remove(profile, '$.hobbies[2]')
where name = 'alice';

-- 检查json是否有效
select json_valid(profile) as is_valid from users;

总结 

到此这篇关于mysql提取json对象和数组的文章就介绍到这了,更多相关mysql提取json对象和数组内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

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

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com