gpt4 book ai didi

json - token "("是无效错误,调用分配给包含 json 类型的自定义类型的函数

转载 作者:行者123 更新时间:2023-11-29 12:52:48 26 4
gpt4 key购买 nike

我正在使用 Postgresql 解码 JWT。 test 函数是其实际功能的简化版本。此处它用于显示我也收到的错误消息。

CREATE TYPE parts AS (header json, payload json, valid boolean);

CREATE OR REPLACE FUNCTION verify(token text, secret text, algorithm text DEFAULT 'HS256')
RETURNS parts AS $$
SELECT
'{"alg": "HS256","typ": "JWT"}'::json AS header,
'{"id": 1, "exp": 1524683318}'::json AS payload,
TRUE AS valid;
$$ LANGUAGE sql;

CREATE OR REPLACE FUNCTION test(token text)
RETURNS parts AS $$
DECLARE
jwt_parts parts;
BEGIN
SELECT verify(test.token, 'secret')
INTO jwt_parts;

RETURN jwt_parts;
END
$$ LANGUAGE plpgsql;

运行 SELECT test('xx') 后,这是我遇到的错误(在 Postgres v10.1 上):

ERROR: invalid input syntax for type json
DETAIL: Token "(" is invalid.
CONTEXT: JSON data, line 1: (...
PL/pgSQL function test(text) line 5 at SQL statement

我想 SELECT ... INTO 我的自定义 parts 类型。我尝试了很多改写方式,但我怀疑这可以比我目前尝试过的更简单。

PS:我正在使用的真实函数test(token text) 更大,需要plpgsql 语言。PS2:只是为了确保当前给出的答案对访问此问题的人有意义。我的问题的原始版本具有如下测试功能:

CREATE OR REPLACE FUNCTION test(token text)
RETURNS parts AS $$
DECLARE
jwt_parts parts;
BEGIN
SELECT ('{"alg": "HS256","typ": "JWT"}', '{"id": 1, "exp": 1524683318}', TRUE)
INTO jwt_parts;

RETURN jwt_parts;
END
$$ LANGUAGE plpgsql;

最佳答案

括号使您选择单列(行类型),而实际上您需要三列。例如:

select (1,2,3)
>>
row
--------
(1,2,3)
(1 row)

所以省略 select 之后的括号:

SELECT ('{"alg": "HS256","typ": "JWT"}', '{"id": 1, "exp": 1524683318}', TRUE)
^^^ ^^^

在回复您的评论时,您的新查询中的错误来自:

SELECT verify('xxx', 'yyy')
INTO jwt_parts;

这再次尝试将单列分配给三列类型。相反,您可以使用:

SELECT * FROM verify('xxx', 'yyy')
INTO jwt_parts;

关于json - token "("是无效错误,调用分配给包含 json 类型的自定义类型的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50132513/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com