为什么在postgreSQL中不能将NULL转换为JSON的null?

时间:2015-08-29 05:49:48

标签: json postgresql

我可以执行

SELECT to_json(1)
SELECT to_json(1.4)
SELECT to_json('this is a nice json text')
SELECT to_json('{"become":"json"}')
SELECT to_json('null')

这一切都正常,但是当你执行时:

SELECT to_json(NULL::TEXT)

你实际上把postgres内置为NULL,就像没有真正发生过一样,当我期待与to_json('null')相同的结果时,你可能期望SELECT to_json(someText)::TEXT FROM ... "input""stuff"""null,而是获得"input""stuff"""

我的问题是,为什么SELECT to_json(NULL::TEXT)没有给你一个json null,而只是一个NULL指针?为什么它在postgres中实现?一些具体原因?

2 个答案:

答案 0 :(得分:3)

to_json被标记为STRICT函数,它的意思是 - 当任何参数为NULL时返回NULL。我不确定它是否是正确的实现,也许它是PostgreSQL的bug。

更新:在讨论Postgres的邮件列表后,这不是错误,而是功能 - 情况并非简单,因此两种语言都支持NULL,但NULL的行为在这些语言中略有不同。很难确定是否必须立即将SQL NULL转换为JSON NULL并立即丢失SQL行为。如果您需要不同的行为,可以使用SQL函数:

CREATE OR REPLACE FUNCTION to_json2(anyelement)
RETURNS json AS $$
SELECT COALESCE(to_json($1), json 'null')
$$ LANGUAGE sql;

答案 1 :(得分:0)

Pavel Stehuleanswer很不错,它使我想到了一个更简单的解决方案:

SELECT 'null'::json;