我创建了一个如下的存储过程,并且我试图将特定列“ fo_data”的所有数据推入单个JSON变量,并且我试图循环获得的JSON数据
CREATE OR REPLACE FUNCTION file_compare()
RETURNS TEXT LANGUAGE 'plpgsql' COST 100 VOLATILE AS $BODY$
DECLARE
fpo_data jsonb;
i JSONB;
BEGIN
SELECT json_agg((fpdata))::jsonb
FROM (SELECT fo_data AS fpdata
FROM fpo LIMIT 100
) t INTO fpo_data;
FOR i IN SELECT * FROM jsonb_array_elements(fpo_data) LOOP
RAISE NOTICE 'output from space %', i->>'bene_firstname';
END LOOP;
RETURN fpo_data;
END;
$BODY$;
我正在获得"RETURN fpo_data"
的以下输出
["{\"bene_first_name\":{\"value\":\"Chris\"},\"bene_last_name\":{\"value\":\"Ronald\"}}",
"{\"bene_first_name\":{\"value\":\"John\"},\"bene_last_name\":{\"value\":\"Wick\"}}",
"{\"bene_first_name\":{\"value\":\"James\"},\"bene_last_name\":{\"value\":\"Cooper\"}}"
如果我尝试像这样打印'bene_firstname'
RAISE NOTICE 'output from space %', i->>'bene_firstname'
我得到的错误为
ERROR: operator does not exist: record ->> unknown.
如果我单独打印“ i”,我将在控制台中打印以下数据
NOTICE: output from space ("""{\\""bene_first_name\\"":{\\""value\\"":\\""Chris90\\""},\\""bene_last_name\\"":{\\""value\\"":\\""Ronald\\""}}""")
NOTICE: output from space ("""{\\""bene_first_name\\"":{\\""value\\"":\\""John\\""},\\""bene_last_name\\"":{\\""value\\"":\\""Wick\\""}}""")
NOTICE: output from space ("""{\\""bene_first_name\\"":{\\""value\\"":\\""James\\""},\\""bene_last_name\\"":{\\""value\\"":\\""Cooper\\""}}""")
如何从上述json数组中获取'bene_firstname'
这是您要寻找的内容:
CREATE OR REPLACE FUNCTION file_compare()
RETURNS TEXT LANGUAGE 'plpgsql' COST 100 STABLE AS $BODY$
DECLARE
fpo_data jsonb;
i JSONB;
BEGIN
SELECT json_agg(fo_data)::jsonb from fpo limit 100 into fpo_data;
FOR i IN SELECT * FROM jsonb_array_elements(fpo_data) LOOP
RAISE NOTICE 'output from space %', i->>'bene_firstname';
END LOOP;
RETURN fpo_data;
END;
$BODY$;
最好的问候,Bjarni