我可以表演
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 中是这样实现的?一些具体的原因?
最佳答案
to_json
函数被标记为STRICT
,这意味着,当任何参数为NULL 时返回NULL。我不确定这是否有意为之,也许这是一个 PostgreSQL 错误。
更新:在 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;
关于json - 为什么在postgreSQL中不能将NULL转成JSON的null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32283125/