【发布时间】:2020-01-27 07:58:48
【问题描述】:
我的 fpo 表如下所示
id fo_data
1 {"bene_first_name":{"value":"Chris1"},"bene_last_name":{"value":"Ronald"}}
2 {"bene_first_name":{"value":"John"},"bene_last_name":{"value":"Wick"}}
1 {"bene_first_name":{"value":"James"},"bene_last_name":{"value":"Cooper"}}
我已经创建了一个如下的存储过程,我正在尝试将特定列“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'
【问题讨论】:
-
这令人惊讶;这个对我有用。你确定
i被声明为jsonb,而不是record? -
@LaurenzAlbe 抱歉,我将“i”声明为记录。我已将其更改为 jsonb。现在我得到 i->>'bene_firstname' 但在'bene_firstname' 中是'值'。如果我尝试打印 i->>'bene_firstname'->>'value' 我收到错误为 ERROR: operator does not exist: text ->> unknown
-
那就是
i->'bene_firstname'->>'value'。 -
@LaurenzAlbe 如果我写 i->'bene_firstname'->>'value',我得到的输出是“来自空间
的输出” -
很难说不知道
fpo。
标签: sql postgresql stored-procedures plpgsql postgresql-9.5