gpt4 book ai didi

arrays - 如何将 json 数组转换为文本数组?

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

此变通方法无效

CREATE FUNCTION json_array_castext(json) RETURNS text[] AS $f$
SELECT array_agg(x::text) FROM json_array_elements($1) t(x);
$f$ LANGUAGE sql IMMUTABLE;

-- Problem:
SELECT 'hello'='hello'; -- true...
SELECT (json_array_castext('["hello","world"]'))[1] = 'hello'; -- false!

那么,如何获取真正的文本数组呢?

PS:与所谓的“一等公民”JSONb,同样的问题。


编辑:在@OtoShavadze 好的回答(评论已解决!)之后,PostgreSQL 开发人员的 list :为什么 x::text 不是类型转换? (使用 pg 9.5.6)以及为什么它不生成警告或错误?

最佳答案

尝试 json_array_elements_text 而不是 json_array_elements,并且您不需要显式转换为文本 (x::text),因此您可以使用:

CREATE or replace FUNCTION json_array_castext(json) RETURNS text[] AS $f$
SELECT array_agg(x) FROM json_array_elements_text($1) t(x);
$f$ LANGUAGE sql IMMUTABLE;

关于你的附加问题

Why x::text is not a cast?

这是强制转换的,因此,它不会给出任何错误,但是当将 json 字符串转换为如下文本时:::text,postgres 会为值添加引号。

仅出于测试目的,让我们再次将您的功能更改为原始功能(因为它在您的问题中)并尝试:

SELECT  
(json_array_castext('["hello","world"]'))[1] = 'hello',
(json_array_castext('["hello","world"]'))[1],
'hello'

如您所见,(json_array_castext('["hello","world"]'))[1] 给出 "hello" 而不是 hello 。这就是为什么在比较这些值时得到 false 的原因。

关于arrays - 如何将 json 数组转换为文本数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45243186/

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