TypeError: datetime.datetime() 不是 JSON 可序列化的
Posted
技术标签:
【中文标题】TypeError: datetime.datetime() 不是 JSON 可序列化的【英文标题】:TypeError: datetime.datetime() is not JSON serializable 【发布时间】:2017-10-24 19:19:43 【问题描述】:我对 MongoDB 中的时间戳有疑问。
所以情况是这样的:
我读入了 json 并为它们添加了时间戳:
my_json['insertTime'] = datetime.datetime.now()
mongodb.collection.insert_one(my_json)
会产生这样的数据库:
"insertTime" : ISODate("2017-05-24T12:39:34.844Z")
在我从数据库中读取它并尝试将相同的文档写入另一个 mongoDB 表后,我收到以下错误:
TypeError: datetime.datetime(2017, 5, 24, 12, 39, 46, 671000) is not JSON serializable
我已经阅读了将日期时间转换为字符串值的解决方案,但我希望它采用 ISODate 格式,就像第一个表中一样。
这就是从表 A 中获取时间戳后的样子:
'insertTime': datetime.datetime(2017, 5, 24, 12, 39, 46, 671000)
我应该怎么做才能将它插入到具有相同格式(ISODate)的第二个表中?
PS:我将数据加载到表B中的方式如下:
tableB.insert_one(json.loads(json.dumps(docFromTableA)))
【问题讨论】:
【参考方案1】:无需通过 JSON 表示即可将文档保存到 MongoDB。做吧:
tableB.insert_one(docFromTableA)
MongoDB 的原生数据格式不是 JSON,它是 BSON,一种比 JSON 类型多得多的二进制结构。 PyMongo 自动在 BSON 和 Python 字典之间转换 MongoDB 文档。
【讨论】:
以上是关于TypeError: datetime.datetime() 不是 JSON 可序列化的的主要内容,如果未能解决你的问题,请参考以下文章
报错解决DateTimeField *** received a naive datetime (***) while time zone support is active
TypeError: 'float' 类型的对象没有 len() & TypeError: 'float' 对象不可迭代