Tom*_*lis 6 postgresql null json casting
因此,以下 PostgreSQL 代码段将返回null,因为它应该:
select ('{"id": null}'::json->'id')
Run Code Online (Sandbox Code Playgroud)
直观地,人们会期望以下语句返回null或空字符串:
select ('{"id": null}'::json->'id')::TEXT
Run Code Online (Sandbox Code Playgroud)
相反,它返回字符串“null”。为什么?
此外,
select ('{"id": null}'::json->'id')::INTEGER
Run Code Online (Sandbox Code Playgroud)
返回cannot cast type json to integer和
select ('{"id": null}'::json->'id')::TEXT::INTEGER
Run Code Online (Sandbox Code Playgroud)
返回invalid input syntax for integer: "null"。(这里的用例是将 JSON null 转换为 INTEGER 列中的 SQL null。)
有一个类似的问题,答案有点难以理解,似乎归结为“JSON nulls 和 SQL nulls 略有不同”,没有进一步的解释。有人可以帮助我了解这里发生了什么吗?这种明显的行为似乎很疯狂!
如何干净利落地解决这个问题?测试字符串“null”的代码很臭,并且在转换之前重构以测试每个潜在节点的 null/“null”同样令人讨厌。还有其他想法吗?
使用->>运算符检索 json 字段。
这应该null对两者都有效并正确返回(如无值):
select ('{"id": null}'::json->>'id')::text
select ('{"id": null}'::json->>'id')::integer
Run Code Online (Sandbox Code Playgroud)
我做了一个小提琴来演示它
PS:要获取 string "null",您需要将 json 定义为:{"id": "null"}
| 归档时间: |
|
| 查看次数: |
4897 次 |
| 最近记录: |