【发布时间】:2020-03-02 14:43:00
【问题描述】:
我需要将表行导出为 JSON 并将其存储在审计表中,该表随后由 .NET 应用程序读取和反序列化。 Postgres 中有一个函数可以做到这一点:
row_to_json(..)
我的问题是 NULL 值被导出为“None”而不是“null”:
{'id': 'a55fe32b-e113-46a2-b54a-444a15922846', 'description': 'Some description'}
{'id': '195e4926-da42-453a-bb3f-789a823b22c0', 'description': 'Some other description'}
{'id': '31f2a08c-ac18-4579-ad5d-08d7f74557de', 'description': None}
反序列化自然会失败,除非我手动创建一些逻辑来将 None 替换为 null,但为什么看起来我是唯一遇到此问题的人?我已经搜索了一个答案,并看到了几个示例,其中 null 按预期从 row_to_json 函数返回,而其他人显然没有这个问题。
我错过了什么?
EDIT:我也将布尔值大写(False 而不是 false - 这是直接无效的 JSON。有些东西不是我的 row_to_json(..) 版本完全正确...
编辑 2:我正在使用带有 Postgres 扩展 (microsoft.azuredatastudio-postgresql) 的 Azure Data Studio。结果证明这是罪魁祸首,其他客户端按预期工作并返回 null。
【问题讨论】:
-
with t(x,y) as (values(1, null::text)) select row_to_json(t) from t;和结果:{"x":1,"y":null}你能提供可重现的例子吗? -
如果我运行同样的查询,我会得到:
{'x': 1, 'y': None}这就是我的意思,它一定与我的 Postgres 配置(或版本?)有关。但在我在工作中可以访问的生产数据库中也是如此。 -
@Abelisto 刚刚在 Postgres 版本 9.6.3 上运行了相同的查询,结果相同 (
{'x': 1, 'y': None})。 -
Returning None 看起来你是从一些 python 方法\代码调用脚本,使用 SQL Alchemy 之类的东西。看起来您正在将 json obj 转换为 python dict。如果是这样的话,这就是 None 的来源。
-
我怀疑您正在使用将 JSON
null转换为None的客户端 API 或编程语言。请标记并描述您使用的语言和 API。
标签: json postgresql azure