有什么方法可以修复postgresql中”invalid input syntax for type json”?

brc7rcf0  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(540)

我已经创建了一个函数“登录”返回给我的用户,如果匹配的用户名或电子邮件作为JSON和参数是JSON,参数是JSON,我所有的其他功能的工作,但这一个是给我的错误“无效的输入语法类型JSON”。我不知道为什么,我已经检查了JSON验证,和所有其他解决方案,以解决它,但失败了,我的一整天都去了地狱,因为它,请帮助我修复它。这是我的代码:

DROP FUNCTION IF EXISTS login;
CREATE OR REPLACE FUNCTION login(data JSONB)
RETURNS JSONB AS $$
DECLARE
    _user JSONB = NULL::JSONB;
    _username VARCHAR = coalesce((data->>'username')::varchar, NULL);
    _email VARCHAR = coalesce((data->>'email')::varchar, NULL);
BEGIN
    -- check if all required variables are available or not
    IF _username IS NULL OR _email IS NULL THEN
        RETURN JSON_BUILD_OBJECT(
            'status', 'failed',
            CASE WHEN _username IS NULL THEN 'username' ELSE 'email' END, 'required'
        );
    END IF;
    
    SELECT username, email INTO _user
    FROM users
    WHERE username = _username OR email = _email;
    
    RETURN JSON_BUILD_OBJECT(
        'status', CASE WHEN _user IS NULL THEN 'failed' ELSE 'success' END,
        'user', _user
    );
END;
$$ LANGUAGE plpgsql;

字符串
这是我的输入格式:

SELECT * FROM login('
                   {"username":"raihan123","email":"[email protected]"}
                   ');


这是我得到的错误:

ERROR:  Token "raihan123" is invalid.invalid input syntax for type json 

ERROR:  invalid input syntax for type json
SQL state: 22P02
Detail: Token "raihan123" is invalid.
Context: JSON data, line 1: raihan123
PL/pgSQL function login(jsonb) line 15 at SQL statement


我累了,如果你能帮我修好它,我将不胜感激。提前感谢!
如果有人想知道我的表有数据,我可以拉数据使用选择命令,并已检查它

SELECT * FROM users WHERE username='raihan123' OR email='[email protected]'


请帮我修复它,我的一整天都在寻找修复它的方法

h9vpoimq

h9vpoimq1#

你没有分享你的table的装饰,但这是问题所在:
电子邮件INTO _user
你的列email很可能是一个VARCHAR,你的variable _user被声明为JSONB。这是行不通的。
另一个问题是username,因为它应该在哪里?你没有一个变量来表示它,除非它应该是json object _user的一部分。
我的建议是,你需要这个解决方案:
_user VARCHAR; --不是jsonb,你不需要NULL,因为它已经是NULL了
你仍然需要决定如何处理用户名。
注意事项:请不要全部使用大写字母,因为这可能会传达出由于错误而导致的沮丧。请记住,保持冷静有助于减少错误并鼓励更多的帮助。

相关问题