You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中如何将JSONB字段的键值提取为两列多行数据

问题:将PostgreSQL JSONB字段的键值对展开为多行两列结果

在PostgreSQL数据库中执行以下查询:

select json_field from my_table where role='addresses_line';

返回的JSONB类型结果为:

{"alpha": ["10001"], "beta": ["10002"], "gamma": ["10003"]}

需要将该JSON字段的所有键和对应数组中的值提取为两列多行的形式,期望输出:

key  |  value
----------------
alpha  |  10001
beta   |  10002
gamma  |  10003

解决方案

由于目标JSON中每个键对应的值都是单元素数组,可以结合jsonb_each和jsonb_array_element_text实现需求:

方式1:关联表查询

SELECT 
    j.key, 
    jsonb_array_element_text(j.value) AS value
FROM 
    my_table,
    jsonb_each(json_field) j
WHERE 
    role = 'addresses_line';

方式2:子查询形式

SELECT 
    key, 
    jsonb_array_element_text(value) AS value
FROM 
    jsonb_each(
        (SELECT json_field FROM my_table WHERE role='addresses_line')
    );

说明:

  • jsonb_each函数会将JSONB对象拆分为多行的键值对记录;
  • jsonb_array_element_text函数将数组类型的value转换为文本类型的单个元素,适配当前场景中每个数组仅含一个元素的情况。

泛化场景补充

如果JSONB字段中的值为单个非数组类型(例如返回结果为{"alpha": 10001, "beta": 10002, "gamma": 10003}),则直接使用jsonb_each即可:

select key, value
from jsonb_each
(
  (select json_field from my_table where role='addresses_line')
);

感谢@stefanov.fm提供此泛化方案。


内容的提问来源于stack exchange,提问作者Tms91

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 06:11:17