我有一个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
。
答案 0 :(得分:3)
来自RFC 7159:
对象结构表示为一对花括号 包含零个或多个名称/值对(或成员)。 名字是 字符串。强>
来自Python docs:
JSON的键/值对中的键始终为str类型。 当a 字典转换为JSON,字典的所有键都是 被胁迫。
JSON 没有任何非字符串dict键的概念。如果你想要那些,你不需要JSON。与JSON最接近的是检测到转换为字符串None
并希望您永远不需要将字符串'null'
实际用作dict键。