【问题标题】:extract jsonb value from json containing json array in postgres从包含postgres中的json数组的json中提取jsonb值
【发布时间】:2020-10-14 00:29:00
【问题描述】:

我有 json 列,它是这样的数据-

{"image_pose_array": [{"image_name": "0026568143_WS.jpg", "image_pose": "EXTRA", "is_blurred": false, "is_dark": false}], "policy_number": "\"D000000000\""}

如何生成如下所示的报告 -

image_name        | image_pose    |
-----------------------------------
0026568143_WS.jpg |  EXTRA        |

我试过了

SELECT  response #>>'{image_pose_array,0}' as json
FROM abcd_abcd.table_data
where policy_number ='D017447997' 
order by request_id  asc;

如何从中提取键的值?

【问题讨论】:

  • 如果数组包含多个对象,结果会怎样?

标签: arrays json postgresql select jsonb


【解决方案1】:

您可以使用#> 从数组中访问整个对象,然后访问每个键:

SELECT response #> '{image_pose_array,0}' ->> 'image_name' as image_name, 
       response #> '{image_pose_array,0}' ->> 'image_pose' as image_pose
from abcd_abcd.table_data
where policy_number ='D017447997' 
order by request_id  asc;

#>#>>(您使用的)之间的区别在于,#> 再次返回 jsonb 值,然后可以进一步访问该值。而#>> 返回一个text 值。

或者,您可以使用#>>,在“路径”参数中再增加一步:

response #>> '{image_pose_array,0,image_name}' as image_name,
response #>> '{image_pose_array,0,image_pose}' as image_pose

【讨论】:

    【解决方案2】:

    我会使用json[b]_array_elements()。这适用于数组包含多个对象的情况(在这种情况下,查询将为每个嵌入对象生成一行):

    select 
        t.request_id,
        x.obj ->> 'image_name' as image_name,
        x.obj ->> 'image_pose' as image_pose
    from digit_bots.t_fourwheeler_analysis_data t
    cross join lateral jsonb_array_elements(t.response -> 'image_pose_array') as x(obj) 
    where policy_number ='D017447997' 
    order by request_id desc
    

    【讨论】:

      猜你喜欢
      • 2021-11-25
      • 1970-01-01
      • 2015-11-28
      • 2023-03-08
      • 1970-01-01
      • 2016-03-09
      • 2021-11-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多