![](/img/trans.png)
[英]Postgres index creation for jsonb column having JSON Array value
[英]extract jsonb value from json containing json array in postgres
我有 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;
如何从中提取键的值?
您可以使用#>
从数组中访问整个 object,然后访问每个键:
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
我会使用json[b]_array_elements()
。 这适用于数组包含多个 object 的情况(在这种情况下,查询将为每个嵌入对象生成一行):
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.