我想将记录集的行转换为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 documentation,row_to_json
只有一个额外的选项或参数,但设置pretty_bool=true
不会删除空值,所以似乎答案可能是否定的。但这似乎也是一个非常明显和有用的功能,所以我希望其他人找到了我错过的东西。
我的最终目标是通过GET
调用PHP页面来检索JavaScript中的记录。我是否最好从更标准的记录集构建PHP中的JSON,而不是使用PostgreSQL的JSON例程?
答案 0 :(得分:6)
Postgres 9.5引入了json_strip_nulls
函数,它似乎完全符合您的要求。
答案 1 :(得分:4)
看起来这个函数的未来版本可能有一个' ignore nulls'选项 - https://commitfest.postgresql.org/action/patch_view?id=1496