Postgres to-json将复合类型转换为空结构

时间:2015-05-06 06:27:19

标签: json postgresql to-json

在下面的代码示例中,postgresql(9.4)应该将复合类型的局部变量转换为json字符串。显然,postgresql处理一个变量,其值为null值,而不是类似的null值。

在我的应用程序中,我有嵌套的复合类型,并希望在复合类型的变量为null时检索null。

我希望你们能在这里帮助我。

CREATE TYPE mytype AS (
    id SMALLINT,
    name TEXT
);

DO $$
DECLARE
    l_var mytype;
BEGIN
    l_var := NULL;
    RAISE INFO '%',to_json(NULL::mytype);
    RAISE INFO '%',to_json(l_var) ;
END $$; 

--Output
INFO:  <NULL>
INFO:  {"id":null,"name":null}

2 个答案:

答案 0 :(得分:3)

是的,PostgreSQL区分ROW与空字段和NULL。修复应该不难 - 您应该使用CASE表达式:

postgres=# DO $$
DECLARE
    l_var mytype;
BEGIN
    l_var := NULL;
    RAISE INFO '%',to_json(NULL::mytype);
    RAISE INFO '%',to_json(CASE WHEN l_var IS NULL THEN NULL ELSE l_var END) ;
END $$; 
INFO:  <NULL>
INFO:  <NULL>
DO

答案 1 :(得分:0)

不幸的是,解决方案并不适用于我,因为它在另一种类型中使用,我不能应用所提出的案例结构。

但是在与后端开发人员交谈之后,即使这些领域没有任何价值,他们也总能获得完整的json结构。所以从语义角度来看,postgres工作正常。