我有一个基本的命令,如下所示:
sample = {}
sample['title'] = "String"
sample['somedate'] = somedatetimehere
当我尝试做时,jsonify(sample)我得到:
TypeError: datetime.datetime(2020, 8, 8, 21, 46, 24, 862000) is not JSON serializable
我该怎么做才能使我的词典示例可以克服上述错误?
注意:虽然可能不相关,但字典是从mongodb中检索记录生成的,在我打印输出时str(sample['somedate'])
,输出为2020-08-08 21:46:24.862000。
原始答案适应了MongoDB“日期”字段表示为:
{"$date": 1506816000000}
如果你希望使用通用的Python解决方案序列化为datetimejson
,请查看@jjmontes
的答案以获取无需依赖项的快速解决方案。
当你使用mongoengine
(每个注释)并且pymongo是一个依赖项时,pymongo具有内置的实用程序来帮助json序列化:http ://api.mongodb.org/python/1.10.1/api/bson/json_util.html
用法示例(序列化):
from bson import json_util
import json
json.dumps(anObject, default=json_util.default)
用法示例(反序列化):
json.loads(aJsonString, object_hook=json_util.object_hook)
Django
Django提供了本机DjangoJSONEncoder序列化程序,可以正确处理这种情况。
参见https://docs.djangoproject.com/en/dev/topics/serialization/#djangojsonencoder
from django.core.serializers.json import DjangoJSONEncoder
return json.dumps(
item,
sort_keys=True,
indent=1,
cls=DjangoJSONEncoder
)
我注意到DjangoJSONEncoder和使用这样的自定义之间的一个区别default:
import datetime
import json
def default(o):
if isinstance(o, (datetime.date, datetime.datetime)):
return o.isoformat()
return json.dumps(
item,
sort_keys=True,
indent=1,
default=default
)
是Django剥离了一些数据:
"last_login": "2018-08-03T10:51:42.990", # DjangoJSONEncoder
"last_login": "2018-08-03T10:51:42.990239", # default
因此,在某些情况下,你可能需要注意这一点。
问题内容: 我有一个基本的命令,如下所示: 当我尝试做时,我得到: 我该怎么做才能使我的字典示例可以克服上述错误? 注意: 尽管可能无关紧要,但是字典是从记录的检索中生成的,这些记录是在我打印出来的地方输出的。 问题答案: 原始答案适应了MongoDB“日期”字段表示为: 如果您希望使用通用的Python解决方案序列化为json,请查看@jjmontes的答案以获取无需依赖项的快速解决方案。 当您
我有一个基本的口述如下: 当我尝试执行时,我得到: 我该怎么做才能使我的字典样本能够克服上面的错误? 注意:尽管可能不相关,但字典是从中检索记录生成的,其中,当我打印出时,输出为。
我在Python中有一个类,用于检索表中的所有列,并返回包含此数据的JSON。 问题是这些列中至少有一列是datetime,我似乎不知道如何序列化这些列以便生成有效的JSON。 我的班级如下: 有什么线索吗?
问题内容: 我需要将日期转换为Excel序列号,以用于编写的数据处理脚本。通过在OpenOffice Calc工作簿中使用日期,我可以推断出“ 1-Jan 1899 00:00:00”映射到数字零。 我编写了以下函数,以将python datetime对象转换为Excel序列号: 但是,当我尝试一些示例日期时,数字与在Excel(以及OpenOffice Calc)中将日期格式设置为数字时得到的数
我正在学习Python和aws。 我想要的是从JSON响应中提取值。此代码适用于不包含日期值的JSON响应,但在本例中,响应包含日期值。 这是我的密码: 我得到了这个错误: 有人知道解决办法吗?thx
有没有办法让Jackson序列化某个流对象(并在之后关闭)?这样地: 使现代化 澄清:我想流式传输内容,而不仅仅是将其序列化到单个String对象。