• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

postgreSql查询复杂json数组字段

武飞扬头像
郝伱
帮助1

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

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

  1.  
    {
  2.  
    "bh": "123",
  3.  
    "jbxx": [{
  4.  
    "xm": "张三",
  5.  
    "nl": "30"
  6.  
    },{
  7.  
    "xm": "李四",
  8.  
    "nl": "35"
  9.  
    }]
  10.  
    }

问题来了 我要去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
张三
李四

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgibkkf
系列文章
更多 icon
同类精品
更多 icon
继续加载