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
相关产品推荐
相关产品推荐

