因为在生产环境中使用到两次 故而记录一下对复杂json字段提取字段值的SQL

先看数据格式:假设表名为 ry;下面的数据格式是我们的字段ryxx

{
    "bh": "123",
    "jbxx": [{
        "xm": "张三",
        "nl": "30"
    },{
        "xm": "李四",
        "nl": "35"
    }]
}

问题来了 我要去ryxx里面的所有人的姓名 那么改怎么取呢? 可以先把ryxx这个字段查出来

select ry.ryxx::json->>'jbxx' jbxx from ry

查出来的结果 肯定就是

jbxx
[{"xm": "张三","nl":"'30"},{"xm": "李四","nl": "35"}]

这里使用json的取值法 可以很轻松取出json对象里面的某个字段 但是这里取到的结果 却成了json数组的格式了,这里再使用字段转json格式再->>取值的方法就不适用了。

这里需要使用的就是一个函数:json_array_elements  需要注意的是 json_array_elements需要处理的是json数组格式的字段 如果这个字段是"[{},{}]"这种格式的 就可以直接使用,但是前提是需要把这个字段转为json格式;

select json_array_elements((ryxx::json->>'jbxx')::json) jbxx from ry

到这里 我们就又拿到了"{}"这种json对象了,所以json_array_elements的作用是什么?就是拆解数组,看下结果:

jbxx
{"xm": "张三","nl":"'30"}
{"xm": "李四","nl": "35"}

 这下再回到最开始的取值方法

select json_array_elements((ryxx::json->>'jbxx')::json)::json->> 'xm' xm jbxx from ry

上结果:

xm
张三
李四

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐