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

时间:2017-08-04 20:40:44

标签: python json postgresql 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

1 个答案:

答案 0 :(得分:3)

来自RFC 7159

  

对象结构表示为一对花括号   包含零个或多个名称/值对(或成员)。 名字是   字符串。

来自Python docs

  

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

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