PostgreSQL提取JSON字段数据返回空值null问题咨询
问题原因
你存储的JSON结构中,顶级键inputs对应的值是数组类型,而非直接的对象类型,你编写的查询语句跳过了数组索引定位步骤,直接访问数组下的desc字段,路径匹配不到对应节点,因此返回空值。
从你给出的示例JSON可以看到:"inputs":[{"name": "ambient",...}],方括号包裹的内容就是数组,包含desc字段的对象存储在该数组的第一个(下标为0)位置。
解决方法
根据业务场景选择对应查询写法即可:
- 确定
inputs数组下永远只有1个元素,直接指定下标0取值即可:
-- 写法1:使用json_extract_path_text函数 SELECT json_extract_path_text(inputs::json,'inputs','0','desc') AS desc FROM source_redshift.staticprompts; -- 写法2:使用箭头运算符简化写法 SELECT (inputs::json -> 'inputs' -> 0 ->> 'desc') AS desc FROM source_redshift.staticprompts;
- 如果
inputs数组可能存在多个元素,需要展开数组提取所有元素的desc字段:
SELECT json_extract_path_text(elem, 'desc') AS desc FROM source_redshift.staticprompts, json_array_elements(inputs::json -> 'inputs') AS elem;
如果你使用的是表名前缀对应的Redshift环境,也可以使用Redshift专属的JSON数组取值函数实现:
SELECT json_extract_path_text( json_extract_array_element_text(inputs::json, 'inputs', 0), 'desc' ) AS desc FROM source_redshift.staticprompts;
内容的提问来源于stack exchange,提问作者Viktor Andriichuk
相关产品推荐
相关产品推荐

