json - 为什么在postgreSQL中不能将NULL转成JSON的null?

标签 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 中是这样实现的?一些具体的原因?

最佳答案

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/

相关文章:

PostgreSQL 平均查询

javascript - 如何在php中解析json数组数据

javascript - 工厂服务无法加载 json 文件

postgresql - 如何使用 PostgreSQL 在 Ecto 中使用点列类型

postgresql - 从 Postgres 中的时间戳获取两周

postgresql - 使用 Liquibase 的更新目标

javascript - 使用 JQuery 时发生 JSON 未定义错误

django - 通过 jQuery 的 $.load() 在 GET 请求中将 Json 发送到 Django

json - Swift JSON 解码器不同类型

json - 如何使用 PostgreSQL 更新 jsonb 字符串?