postgreSql查询复杂json数组字段
因为在生产环境中使用到两次 故而记录一下对复杂json字段提取字段值的SQL先看数据格式:假设表名为 ry;下面的数据格式是我们的字段ryxx{"bh": "123","jbxx": [{"xm": "张三","nl": "30"},{"xm": "李四","nl": "35"}]}问题来了 我要去ryxx里面的所有人的姓名 那么改怎么取呢? 可以先把ryxx这个字段查出来..
·
因为在生产环境中使用到两次 故而记录一下对复杂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 |
张三 |
李四 |
更多推荐
已为社区贡献1条内容
所有评论(0)