gpt4 book ai didi

python - datetime 类型的对象不是 JSON 可序列化错误

转载 作者:行者123 更新时间:2023-12-01 07:46:36 24 4
gpt4 key购买 nike

我在 python 中使用 DateTime 值时遇到一些问题。当我在以下代码中使用 session_start 时,我收到一个 Datetime 类型的对象不是 JSON 可序列化错误

View .py

    dataSourceBar = {}
dataSourceBar['chart'] = {
"caption": "Rainfall",
"subCaption": "Shown per date",
"xAxisName": "Session",
"yAxisName": "Rainfall in MM",
"theme": "candy"
}

dataSourceBar['data'] = []

objects_with_category_id_2 = dashboard_input.objects.filter(category_category_id=2)

for obj in objects_with_category_id_2:
data = {'label': obj.session_start,
'value': obj.input_input_value}
dataSourceBar['data'].append(data)

模型.py

class dashboard_input(models.Model):
session_start = models.DateTimeField(max_length=100)

回溯

Internal Server Error: /dashboard/
Traceback (most recent call last):
File "C:\Users\natas\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\Users\natas\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\base.py", line 126, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\natas\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\base.py", line 124, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\var\www\VSDK\vsdk\dashboard\views.py", line 69, in Chart
return render(request, 'dash.html', {'output' : column2D.render(),'output2' : doughnut3d.render()})
File "C:\var\www\VSDK\vsdk\dashboard\fusioncharts.py", line 52, in render
self.readyJson = json.dumps(self.constructorOptions, ensure_ascii=False)
File "C:\Users\natas\AppData\Local\Programs\Python\Python37-32\lib\json\__init__.py", line 238, in dumps
**kw).encode(obj)
File "C:\Users\natas\AppData\Local\Programs\Python\Python37-32\lib\json\encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "C:\Users\natas\AppData\Local\Programs\Python\Python37-32\lib\json\encoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "C:\Users\natas\AppData\Local\Programs\Python\Python37-32\lib\json\encoder.py", line 179, in default
raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type datetime is not JSON serializable

我从数据库 View 中检索值,该 View 由用户填写数据的其他表填充。

有人可以帮我解决这个问题吗?

最佳答案

正如错误消息所示,datetime对象无法通过json自动转换为字符串或字典。看来您的 View 函数在将所有内容发送到前端或渲染之前都将其转换为 json。

您需要做的就是显式地将 DateTime 对象转换为字符串,以便您的代码正常工作:

for obj in objects_with_category_id_2:
data = {'label': str(obj.session_start),
'value': obj.input_input_value}
dataSourceBar['data'].append(data)

或者使用日期时间的内置函数来格式化它。对于 ISO 格式,请使用 .isoformat():

for obj in objects_with_category_id_2:
data = {'label': obj.session_start.isoformat(),
'value': obj.input_input_value}
dataSourceBar['data'].append(data)

如果您希望日期具有不同的格式,可以使用 datetime.strftime(format) 函数,该函数采用包含结果日期字符串格式的字符串。检查日期时间包文档:https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior

也许是这样的:

for obj in objects_with_category_id_2:
data = {'label': obj.session_start.strftime("%d.%m.%Y"),
'value': obj.input_input_value}
dataSourceBar['data'].append(data)

祝你好运!

关于python - datetime 类型的对象不是 JSON 可序列化错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56431081/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com