在Postgres中存储JSON时保留Python None/NULL



我有一个PostgreSQL数据库表,其中包含一个JSON数据类型列。当我将 JSON 字符串存储在数据库中时,不会保留None。这可以用这个代码片段重现:

import json,psycopg2
dictionary = {}
dictionary[None] = 0
conn = psycopg2.connect("host='localhost' dbname='testdb' user='postgres' 
password='postgres'")
cursor = conn.cursor()
cursor.execute("""INSERT INTO testtable (json_column) VALUES (%s)""", 
(json.dumps(dictionary), ))
cursor.execute("""SELECT json_column FROM testtable""")
result = cursor.fetchall()[0][0].keys()[0]
print result
print type(result)
if result is None:
print 'result is None'
else:
print 'result is not None'

此 Python 代码的输出为:

drew@debian:~/python$ python test.py
null
<type 'unicode'>
result is not None
drew@debian:~/python$

如何将None作为键存储在 JSON 列中?JSON 对象也有用于'None''null'的键,因此存储的值必须为Nonenull

来自 RFC 7159:

对象结构表示为一对大括号 围绕零个或多个名称/值对(或成员(。名称是 字符串。

从 Python 文档中:

JSON 的键/值对中的键始终是 str 类型。字典转换为JSON,字典的所有键都是 被胁迫到弦上。

JSON没有任何非字符串字典键的概念。如果你想要这些,你不需要JSON。使用JSON最接近的是检测None转换为的字符串,并希望您永远不需要实际使用字符串'null'作为字典键。

最新更新