在PostgreSQL中,如何将json字符串解包到文本中?

时间:2015-07-30 00:04:23

标签: postgresql

假设我的值为json,比如y。可以通过例如obj->'key'或任何返回类型json的值的函数来获得这样的值。

此值在转换为text时,包含引号 "y"而不是y。如果使用json类型是不可避免的,这会带来问题,特别是当我们希望将值与文字字符串进行比较时,例如。

select foo(x)='bar';

API Brainstorm页面建议使用from_json函数智能解包JSON字符串,但我怀疑它是否可用。与此同时,如何将JSON字符串转换为不带引号的文本?

2 个答案:

答案 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?

因此它专门解决了您的问题,但不适用于任何其他类型,例如整数或浮点型。 #>运算符也不适用于其他类型。