這裏是我的嘗試:
CREATE or replace FUNCTION json_project(jsondata jsonb, jsonfields varchar) RETURNS json
AS $$
declare
newJson varchar;
cs record;
BEGIN
newJson := '{';
for cs in (select key, value
from json_each(jsondata::json)
where key in (select * from unnest(string_to_array(jsonfields,',')))) loop
if newJson != '{' then
newJson := newJson || ',';
end if;
newJson := newJson || '"'||cs.key||'"'||':'||cs.value;
end loop;
newJson := newJson || '}';
RETURN newJson::jsonb;
END;
$$ LANGUAGE plpgsql;
如果你運行它:
select json_project('{"a":"someAvalue", "b":"someBvalue", "c":1, "d":"someDvalue" }',
'a,c');
你會得到
{"a": "someAvalue", "c": 1}
的結果應該是像或者只是行的JSON? –
最好是json。 與不同列的行也很好。 不同的行(如使用json_each時)是最不需要的 –