Mysql 直接查询存储的Json字符串中的数据
我们平时使用mysql,出于项目需求,可能需要直接将Java对象或者一个大json,直接存到表中的某个字段中;使用的时候再查出来,反序列化到对象或者一个Map中,方便我们操作;
大多时候,我们可能并不需要所有的数据,只想使用这个对象或者json中的某一个值,来做逻辑判断而已
那我们可以这样做,例如:原来我们需要查出某个字段的数据,然后反序列化成对象再调用其中的一个属性
SELECT content FROM table_name WHERE id = 32;
查询结果:
列名:content
结果:{"fieldType":"SELECT","selectType":"SINGLE","options":["本科","研究生","硕士"]}
TableNameContent content = JsonUtils.jsonNode2Type(TableNameContent.class, TableName.getContent());
if (SELECT.equals(content.getFieldType())){
//bala... bala...
}
这样做,其实也没啥毛病,那么其实还可以换一种其他的方式;
我们可以使用使用 json字段名->’$.json属性’ 进行查询 直接在content这个列里查出json后,使用mysql自带的函数,直接查询出我们想要的某一个字段;
SELECT content, REPLACE(json_extract(content,'$.fieldType'),'"','') fieldType FROM table_name WHERE id = 32; 或 SELECT content, REPLACE(content->'$.fieldType','"','') fieldType FROM table_name WHERE id = 32;
查询结果:
列名:content fieldType
结果:{"fieldType":"SELECT","selectType":"SINGLE","options":["本科","研究生","硕士"]} SELECT
那我们就可以直接拿到这个字段的值来进行做我们想做的事情了。直接查出来的数据要是原来存的时候就带有双引号,那么查出来的也是带双引号的,可以使用REPLACE函数替换一下就好了。
当然还有更多的用法:
1 --> SELECT content FROM table_name WHERE content->'$.fieldType'='SELECT';
{"fieldType":"SELECT","selectType":"MULTIPLE","options":["选择一","选择二","选择三"]}
{"fieldType":"SELECT","selectType":"SINGLE","options":["2w","3w","4w","5w"]}
{"fieldType":"SELECT","selectType":"SINGLE","options":["本科","研究生","硕士"]}
{"fieldType":"SELECT","selectType":"SINGLE","options":["11","22","44","23"]}
2 --> SELECT content FROM sy_config_member_info WHERE content->'$.fieldType'='SELECT' AND content->'$.selectType'='MULTIPLE';
{"fieldType":"SELECT","selectType":"MULTIPLE","options":["选择一","选择二","选择三"]}
当然,这样做的性能可能就不要指望很高了噢,谨慎使用哈~
到此这篇关于Mysql 直接查询存储的Json字符串中的数据的文章就介绍到这了,更多相关Mysql 直接查询存储Json内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
MySQL和MySQL驱动mysql-connector-java升级到8.0.X版本问题
这篇文章主要介绍了MySQL和MySQL驱动mysql-connector-java升级到8.0.X版本问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-02-02
MYSQL实现排名及查询指定用户排名功能(并列排名功能)实例代码
这篇文章主要给大家介绍了关于MYSQL实现排名及查询指定用户排名功能(并列排名功能)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧2018-10-10
MySQL中的聚簇索引、非聚簇索引、联合索引和唯一索引详细介绍
本文主要介绍了MySQL的索引类型,根据索引的存储方式来划分,索引可以分为聚簇索引和非聚簇索引。聚簇索引的特点是叶子节点包含了完整的记录行,而非聚簇索引的叶子节点只有所以字段和主键ID,感兴趣的同学可以阅读本文2023-04-04
MySQL:reading initial communication packet问题解决方法
网站访问出现如题错误,经过检查my.cnf,发现innodb_buffer_pool_size = 2048M 设置过大,调整为innodb_buffer_pool_size = 1024M即可,网上也有该问题的其他解决方法,但都不能解决我的问题2012-07-07


最新评论