假设我的值为json
,比如y
。可以通过例如obj->'key'
或任何返回类型json
的值的函数来获得这样的值。
此值在转换为text
时,包含引号即 "y"
而不是y
。如果使用json
类型是不可避免的,这会带来问题,特别是当我们希望将值与文字字符串进行比较时,例如。
select foo(x)='bar';
API Brainstorm页面建议使用from_json
函数智能解包JSON字符串,但我怀疑它是否可用。与此同时,如何将JSON字符串转换为不带引号的文本?
答案 0 :(得分:5)
->>
运算符正确地展开引号。为了利用该运算符,我们将值包含在数组中,然后将其转换为json
。
CREATE OR REPLACE FUNCTION json2text(IN from_json JSON)
RETURNS TEXT AS $$
BEGIN
RETURN to_json(ARRAY[from_json])->>0;
END; $$
LANGUAGE plpgsql;
为了完整起见,我们提供了一个使用上述功能的CAST
。
CREATE CAST (json AS text) WITH json2text(json) AS ASSIGNMENT;
答案 1 :(得分:0)
这适用于文本:
SELECT to_json('foo') #>> '{}';
发件人:Postgres: How to convert json string to text?
因此它专门解决了您的问题,但不适用于任何其他类型,例如整数或浮点型。 #>
运算符也不适用于其他类型。