PostgreSQL。 json_object_agg() returns 文本字符串而不是 json 对象
PostgreSQL. json_object_agg() returns text string instead of json object
如here 所写,json_object_agg(name, value)
return 类型为json
。同时,如果我 return 由存储过程中的 json_object_agg()
编辑的值 return:
CREATE OR REPLACE FUNCTION _getlocales()
RETURNS json AS
$BODY$DECLARE
var json;
BEGIN
select into var json_object_agg("key", "values") from table;
RETURN var;
END;$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
并在另一个函数中调用它:
variable = _getlocales();
RAISE NOTICE 'DATA TYPE %', pg_typeof(variable);
SELECT variable->>'property'
我无法获取 JSON
对象字段。我运行进入:
ERROR: operator does not exist: text ->> unknown
并且引发的通知显示数据类型为text
。
NOTICE: DATA TYPE text
我尝试将 _getlocales()
return 类型更改为 jsonb
,但没有任何改变:
CREATE OR REPLACE FUNCTION nav._getlocales()
RETURNS jsonb AS
$BODY$DECLARE
_l18nJson jsonb;
...
为什么会这样?
@Richard Huxton 为我指明了正确的方向,我当时注意力不集中,我用 text
数据类型声明了 variable
。所以,我改变了:
$BODY$DECLARE
variable text;
收件人:
$BODY$DECLARE
variable json;
问题已解决。
如here 所写,json_object_agg(name, value)
return 类型为json
。同时,如果我 return 由存储过程中的 json_object_agg()
编辑的值 return:
CREATE OR REPLACE FUNCTION _getlocales()
RETURNS json AS
$BODY$DECLARE
var json;
BEGIN
select into var json_object_agg("key", "values") from table;
RETURN var;
END;$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
并在另一个函数中调用它:
variable = _getlocales();
RAISE NOTICE 'DATA TYPE %', pg_typeof(variable);
SELECT variable->>'property'
我无法获取 JSON
对象字段。我运行进入:
ERROR: operator does not exist: text ->> unknown
并且引发的通知显示数据类型为text
。
NOTICE: DATA TYPE text
我尝试将 _getlocales()
return 类型更改为 jsonb
,但没有任何改变:
CREATE OR REPLACE FUNCTION nav._getlocales()
RETURNS jsonb AS
$BODY$DECLARE
_l18nJson jsonb;
...
为什么会这样?
@Richard Huxton 为我指明了正确的方向,我当时注意力不集中,我用 text
数据类型声明了 variable
。所以,我改变了:
$BODY$DECLARE
variable text;
收件人:
$BODY$DECLARE
variable json;
问题已解决。