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

