在row_SQL中排除row_to_json()中的空值

时间:2014-04-15 20:01:51

标签: json postgresql

我想将记录集的行转换为JSON,但不包括任何在JavaScript中最终未定义的空条目。例如,假设我的表testdata包含条目

id | prop1 (integer) | prop2 (text)
-------------------------------------
 1 |               42 | 'Answer'
 2 |             NULL | 'No prop one'
 3 |                0 | NULL

然后执行

SELECT row_to_json(testdata) FROM testdata

我得到的是

{"id":"1","prop1":"42","prop2":"Answer"}
{"id":"2","prop1":null,"prop2":"No prop one"}
{"id":"3","prop1":"0","prop2":null}

但相反,我想要的是:

{"id":"1","prop1":"42","prop2":"Answer"}
{"id":"2","prop2":"No prop one"}
{"id":"3","prop1":"0"}

这可能吗?根据PostgreSQL 9.3的JSON functions documentationrow_to_json只有一个额外的选项或参数,但设置pretty_bool=true不会删除空值,所以似乎答案可能是否定的。但这似乎也是一个非常明显和有用的功能,所以我希望其他人找到了我错过的东西。

我的最终目标是通过GET调用PHP页面来检索JavaScript中的记录。我是否最好从更标准的记录集构建PHP中的JSON,而不是使用PostgreSQL的JSON例程?

2 个答案:

答案 0 :(得分:6)

Postgres 9.5引入了json_strip_nulls函数,它似乎完全符合您的要求。

答案 1 :(得分:4)

看起来这个函数的未来版本可能有一个' ignore nulls'选项 - https://commitfest.postgresql.org/action/patch_view?id=1496