Mysql5.7 + 查询并解析json数据方法
json
适用于现代 C++ 的 JSON。
项目地址:https://gitcode.com/gh_mirrors/js/json
免费下载资源
·
前言
我们在实际开发中,有时候会遇到数据库存放json格式的数据,我们需要解析并且去计算求和等等操作,常规做法肯定是代码取出来然后循环遍历,一个一个解析。当然这没错,但是能不能通过sql语句直接查询并且解析呢?
sure
Mysql5.7 之前是不能解析的,从5,7之后,Mysql提供了一个原生的Json类型,Json值将不再以字符串的形式存储,而是采用一种允许快速读取文本元素(document elements)的内部二进制(internal binary)格式。 在Json列插入或者更新的时候将会自动验证Json文本,未通过验证的文本将产生一个错误信息。于是就有了一个函数----JSON_EXTRACT
话不多说直接上干货:
函数语法:JSON_EXTRACT(字段名,'$.json字段名')
例如:我库里存的是
{"ladder":true,"useFirstSurplusDosage":0.0,"useSecondSurplusDosage":0.0,"ladderConfig":[{"price":2800,"dosage":242.0,"increment":"60"}, {"price":3360,"dosage":1800.0,"increment":"60"}, {"price":4200}, {}, {}],"gasValue":34.0,"detail":[{"price":2800,"cur":0,"fee":95200,"dosage":34.0}],"fee":95200}
比较复杂吧?
没关系 ,函数能帮我们解决!
我想取ladderConfig的内容(到时候把第一个参数换成字段,把dual换成实际的表):
SELECT
JSON_EXTRACT(
'{"ladder":true,"useFirstSurplusDosage":0.0,"useSecondSurplusDosage":0.0,"ladderConfig":[{"price":2800,"dosage":242.0,"increment":"60"}, {"price":3360,"dosage":1800.0,"increment":"60"}, {"price":4200}, {}, {}],"gasValue":34.0,"detail":[{"price":2800,"cur":0,"fee":95200,"dosage":34.0}],"fee":95200}',
'$.ladderConfig'
)
FROM
DUAL
就能取到
好,有同学可能会问,这里面是个数组怎么弄啊
简单,请往下看
获取数组
大家想一想,单层的json我们能获取到,那数组不就是多个单层嘛? OK 开始!
我要获取这个数组第一个元素,怎么搞, 没错 和代码一样!
SELECT
JSON_EXTRACT(
JSON_EXTRACT(
'{"ladder":true,"useFirstSurplusDosage":0.0,"useSecondSurplusDosage":0.0,"ladderConfig":[{"price":2800,"dosage":242.0,"increment":"60"}, {"price":3360,"dosage":1800.0,"increment":"60"}, {"price":4200}, {}, {}],"gasValue":34.0,"detail":[{"price":2800,"cur":0,"fee":95200,"dosage":34.0}],"fee":95200}',
'$.ladderConfig'
),'$[0]')
FROM
DUAL
没错 你没看错,多个单层不就套娃不就行了吗?
好,我们继续
那我想获取数组元素里面的某个属性值咋办? 看好了
没错,加属性名啊,是不是傻?
OK 结束!
------------------------------ 20230531 续篇来了----------------
Mysql5.7 + 查询并解析json数据方法(后转)
GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:28 天前 )
960b763e
3 个月前
8c391e04
6 个月前
更多推荐
已为社区贡献1条内容
所有评论(0)