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

PostgreSQL中如何从文本类型JSON列仅提取值?

提取PostgreSQL文本列中JSON对象的所有值

现有表the_table的the_json列类型为text,存储JSON格式数据(示例:'{"foo": 42, "bar": 43}'),无法修改表结构,需提取JSON中的所有值(如42、43)并忽略键。

使用json_each时直接查询能得到键值对记录集,但子查询提取value列会提示“column 'value' does not exist”,这是因为json_each返回的是复合类型,并非拆分好的独立列,可通过以下方式处理:

方法1:横向关联展开(推荐)

通过LATERAL JOIN(或简写为逗号分隔)将json_each的结果与原表关联,直接访问展开后的value列:

SELECT j.value
FROM the_table, json_each(the_json::json) j;

给json_each的结果起别名j,就能直接调用其内置的value字段。

方法2:拆分复合类型列

如果用子查询,需要先把复合类型拆分为独立列,再提取value:

SELECT value
FROM (
  SELECT (json_each(the_json::json)).*
  FROM the_table
) sub_query;

(json_each(...)).*会把复合类型的key和value拆成两个单独的列,外层查询即可直接取value。

方法3:直接提取值(PostgreSQL 12+)

如果你的PostgreSQL版本是12及以上,可以用json_object_values函数直接获取所有值,无需处理键,语法更简洁:

SELECT json_object_values(the_json::json)
FROM the_table;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 08:42:01