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

如何将get_jstr()函数的输出传入jsonb_path_query()函数?

解决方案:处理自定义函数返回JSON字符串的jsonb_path_query调用问题

问题核心是jsonb_path_query()要求第一个参数必须是jsonb类型,但你的get_jstr()返回的是普通文本格式的JSON字符串,类型不匹配导致调用失败。以下是几种可行的解决方法:

  • 临时转换类型(直接调用):在函数返回值后加上::jsonb做类型转换,直接传入jsonb_path_query:

    SELECT jsonb_path_query( (SELECT get_jstr())::jsonb, '$[0]');
    
  • 临时转换类型(子查询方式):如果用子查询,同样需要给返回的字符串列做类型转换:

    SELECT jsonb_path_query(v::jsonb, '$[0]') FROM (SELECT get_jstr()) v;
    

    或者给子查询的列命名,可读性更好:

    SELECT jsonb_path_query(jstr_data::jsonb, '$[0]') FROM (SELECT get_jstr() AS jstr_data) t;
    
  • 修改函数返回类型(一劳永逸):如果后续经常需要用这个函数的结果做JSON操作,直接修改函数让它返回jsonb类型,避免每次手动转换:

    CREATE OR REPLACE FUNCTION get_jstr() RETURNS jsonb AS $$
    BEGIN
      -- 把原函数返回的JSON字符串用to_jsonb转换后返回
      -- 示例:假设原函数返回'["a", "b", "c"]'
      RETURN to_jsonb('["a", "b", "c"]'::text);
    END;
    $$ LANGUAGE plpgsql;
    
    -- 修改后直接调用即可
    SELECT jsonb_path_query(get_jstr(), '$[0]');
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 00:55:59