如何从jsonb数组postgres中提取?

时间:2021-05-13 04:57:45

标签: postgresql jsonb

我的一列包含以下数组。我只需要 order_lookup_code。我该怎么做?

<头>
vendor_provided_data
{"vendor_data": [{"order_id": 10000, "shipment_id": 20000, "order_lookup_code": "fr_30000dd"}]}

2 个答案:

答案 0 :(得分:0)

我假设 vendor_provided_data 是您的 jsonb 列。 此查询将返回您选择 order_lookup_code 的所有表装运记录。

选择jsonb_array_elements(vendor_provided_data->'vendor_data')->>'order_lookup_code' order_lookup_code 从 运输 在哪里 1 = 1

答案 1 :(得分:0)

如果需要多列,则每列需要一个表达式,例如

select vendor_provided_data #>> '{vendor_data, 0, order_lookup_code}' as code_1,
       vendor_provided_data #>> '{vendor_data, 1, order_lookup_code}' as code_2,
       vendor_provided_data #>> '{vendor_data, 2, order_lookup_code}' as code_3,
       ...
from the_table

#>> 运算符从 JSON 值中提取“嵌套”元素,沿着“路径”,其中数组的每个元素指定路径中的一个步骤。使用多个 -> 运算符可以实现相同的目的。 {vendor_data, 0, 'order_lookup_code'} 相当于 -> 'vendor_data' -> 0 -> 'order_lookup_code'

如果多行都OK,可以使用jsonb_array_elements()

select t.id, --<< whatever columns you want from the table
       vd.item ->> 'order_lookup_code' as lookup_code
from the_table t
  cross join jsonb_array_elements(t.vendor_provided_data -> 'vendor_data') as vd(item)

如果您使用的是 Postgres 12 或更高版本,则可以将所有代码提取为单个 JSON 数组:

select jsonb_path_query_array(vendor_provided_data, '$.vendor_data[*].order_lookup_code') as all_codes
from the_table
相关问题