gpt4 book ai didi

json - 当记录包含 json 或字符串的混合时,如何在 Postgres 中防止 'invalid input syntax for type json'

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

我有一个包含 JSON 和计划文本的文本列。我想将它转换为 JSON,然后选择一个特定的属性。例如:

user_data
_________
{"user": {"name": "jim"}}
{"user": {"name": "sally"}}
some random data string

我试过:

select user_data::json#>'{user,name}' from users

我得到:

ERROR:  invalid input syntax for type json
DETAIL: Token "some" is invalid.
CONTEXT: JSON user_data, line 1: some...

是否可以避免这种情况?

最佳答案

如果要跳过包含无效 JSON 的行,则必须先测试文本是否为有效 JSON。您可以通过创建一个函数来执行此操作,该函数将尝试解析该值,并捕获无效 JSON 值的异常。

CREATE OR REPLACE FUNCTION is_json(input_text varchar) RETURNS boolean AS $$
DECLARE
maybe_json json;
BEGIN
BEGIN
maybe_json := input_text;
EXCEPTION WHEN others THEN
RETURN FALSE;
END;

RETURN TRUE;
END;
$$ LANGUAGE plpgsql IMMUTABLE;

有了它后,您可以在 CASEWHERE 子句中使用 is_json 函数来缩小有效值的范围。

-- this can eliminate invalid values
SELECT user_data::json #> '{user,name}'
FROM users WHERE is_json(user_data);

-- or this if you want to fill will NULLs
SELECT
CASE
WHEN is_json(user_data)
THEN user_data::json #> '{user,name}'
ELSE
NULL
END
FROM users;

关于json - 当记录包含 json 或字符串的混合时,如何在 Postgres 中防止 'invalid input syntax for type json',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45971754/

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