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

PostgreSQL从json_agg的JSON查询childcare值返回NULL问题求助

PostgreSQL JSONB查询返回NULL的解决方案

你的问题出在JSONB的结构上:字段t是JSON数组,而非单个JSON对象。直接使用->'childcare'是在数组本身上查找名为childcare的键,但数组没有这类键,所以返回NULL。

正确查询方式

方式1:展开数组后筛选

通过jsonb_array_elements函数将数组展开为单个对象,再提取目标键的值:

with a as(
SELECT '[{"residential" : 100}, {"childcare" : 200}, {"open space" : 50}]'::jsonb t
)
select elem->>'childcare' as childcare_value
from a, jsonb_array_elements(t) elem
where elem ? 'childcare';

方式2:使用JSON路径查询

用jsonb_path_query直接定位数组中元素的目标键,更简洁:

with a as(
SELECT '[{"residential" : 100}, {"childcare" : 200}, {"open space" : 50}]'::jsonb t
)
select jsonb_path_query(t, '$[*].childcare')::int as childcare_value;

相关PostgreSQL文档说明

PostgreSQL的JSONB操作符->作用分为两种场景:

  • 针对JSON对象:返回指定键对应的JSON值
  • 针对JSON数组:返回指定索引位置的数组元素
    当操作目标是数组却传入对象键名时,因不匹配场景,会返回NULL。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:15:40