mysql json类型查询对象和数组等格式

前沿 and 背景

mysql5.7之后就推出了一种json类型的数据结构,其实json我们在很多场景下都会用到,因为json是数据格式是可变性的,比如用户拓展信息就可以方到json里面,因为个人和企业保存的字段可能会不同如营业执照、经营场所等。废话有点多开始主题,大家在后端开发的时候相信查询json格式比较多,像插入和更新不需要json相关函数的直接组装好json字符串操作就好了,本章主要讲解查询类的。

查询简单单层json对象

create table rule
(
  id           int auto_increment comment '自增ID'
    primary key,
  rule_key     varchar(60)                         null comment '规则key',
  rule_value   json                                null comment '规则值',
)
  comment '规则表';

ok后面都围绕着这张表讲解

首先我们插入数据INSERT INTO partyAccount.rule (id, rule_key, rule_value) VALUES (1, 'age', '{"value": 20}');
JSON_CONTAINS(field, value, path)

第一个参数是字段名,第二个参数是查找的值,第三个参数是查找路径

案列一:现在我们想查询年龄是25岁的sql怎么写呢这里有两种方式,一种是使用JSON_CONTAINS函数还一种是使用缩写->$.

JSON_CONTAINS第一种方式,

select *
from rule
where rule_key = 'age' and json_contains(rule_value, '25','$.value');

JSON_CONTAINS() 
语法: JSON_CONTAINS(json_doc, val[, path]) 
说明: 
返回0或者1来表示目标JSON文本中是否包含特定值,或者JSON文本的指定路径下是否包含特定值。
以下情况将返回NULL: 
目标JSON文本或者特定值为NULl
指定路径非目标JSON文本下的路径

json_extract第二种方式:

select * from rule where rule_key='age'
and json_extract(rule_value,'$.value')=25;

JSON_EXTRACT() 
语法: JSON_EXTRACT(json_doc, path[, path] ...) 
说明: 
返回json_doc中与path参数相匹配的数据。当有参数为NULl或者文本中未找到指定path时将返回NULL。当参数不合法时将报错。
返回结果包含所有与path匹配的值。如果返回多个值,则将自动包装为数组,其顺序为匹配顺序;相反则返回单个匹配值。
MySQL5.7.9及之后的版本将支持’->’操作符作为本函数两个参数时的便捷写法。->左边的参数为JSON数据的列名而不是一个表达式,其右边参数JSON数据中的某个路径表达式。详细使用方法将在文末详细阐述。 

第二种缩写->$.方式:

select * from rule where rule_value->'$.value'=25;

案例二:查询姓名是张三的数据

INSERT INTO partyAccount.rule (id, rule_key, rule_value) VALUES (3, 'name', '{"value": "张三"}');

select *
from rule
where rule_key='name' and rule_value->'$.value'='张三';

查询复杂嵌套json对象

INSERT INTO rule (id, rule_key, rule_value) VALUES (4, 'address', '{"province": {"city": "北京市"}}');

INSERT INTO rule (id, rule_key, rule_value) VALUES (4, 'user', '{"info": {"id_no": "2313156151111"}}');

案例一:查询城市是北京市的数据

select *
from rule
where rule_key = 'address'
  and json_extract(rule_value,'$.province.city')='北京市';
引用\[1\]中提供了一些关于MySQL中使用JSON字段进行查询的示例代码。其中,可以使用json_extract函数来查询JSON字段中的特定值,使用json_contains函数来判断JSON字段是否包含某个值。另外,还可以使用JSON_REPLACE函数来更新JSON字段的值。需要注意的是,如果字段不存在,则返回null;如果JSON字段中的值为null,则返回字符串"null"。在引用\[2\]中也提供了一些使用对象类型数组类型进行查询的示例代码。例如,可以使用JSON_UNQUOTE和JSON_EXTRACT函数来查询对象类型的字段,使用JSON_CONTAINS函数来判断数组类型的字段是否包含某个值。在引用\[3\]中提供了一个JsonVo对象的示例,可以使用该对象来映射JSON字段的结构。综上所述,可以根据具体的需求使用MySQL提供的相关函数和对象来进行JSON字段的查询操作。 #### 引用[.reference_title] - *1* [mysql 查询json字段](https://blog.csdn.net/zk_jy520/article/details/126028017)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [mybatis mysql json 字段查询操作](https://blog.csdn.net/weixin_44604118/article/details/128252131)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [MySQL JSON字段使用](https://blog.csdn.net/nics1993/article/details/125597245)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值