我有一个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'
的键,因此存储的值必须为None
或null
。
来自 RFC 7159:
对象结构表示为一对大括号 围绕零个或多个名称/值对(或成员(。名称是 字符串。
从 Python 文档中:
JSON 的键/值对中的键始终是 str 类型。字典转换为JSON,字典的所有键都是 被胁迫到弦上。
JSON没有任何非字符串字典键的概念。如果你想要这些,你不需要JSON。使用JSON最接近的是检测None
转换为的字符串,并希望您永远不需要实际使用字符串'null'
作为字典键。