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

如何让PostgreSQL存储过程sp_table返回指定格式的JSON结果?

PostgreSQL存储过程返回无外层双引号的JSON格式实现方案

完全可以实现你期望的格式,核心是确保存储过程返回的第二列类型为原生JSON类型(json或jsonb),而非字符串类型(text/varchar)。

问题根源

你当前的sp_table可能是将JSON对象转换为字符串返回(比如用::text强制转换),导致结果带有外层双引号;而sp_only_json是直接返回json类型,所以输出符合预期。

具体实现方案

改写存储过程,让返回列的类型定义为json,并直接返回JSON构造函数的结果(无需转字符串):

CREATE OR REPLACE FUNCTION sp_table()
RETURNS TABLE(id integer, data json) AS $$
BEGIN
  RETURN QUERY
  SELECT 
    t.id,
    -- 直接构造JSON对象并返回json类型
    json_build_object('cola', t.cola, 'colb', t.colb) AS data
  FROM your_table t; -- 替换为你的实际表名
END;
$$ LANGUAGE plpgsql;

验证效果

调用存储过程时:

SELECT * FROM sp_table();

会得到你期望的输出格式:

id |         data
----+----------------------
  1 | {"cola":1,"colb":"a"}
  2 | {"cola":2,"colb":"b"}

补充说明

如果你的场景需要更复杂的JSON结构,也可以使用row_to_json()函数直接将行数据转为JSON:

SELECT t.id, row_to_json(t.*) AS data FROM your_table t;

只要确保返回列的类型是json/jsonb,就不会出现外层双引号的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 17:51:45