尝试构建 JSON 文件,但将日期时间错误连接到字符串
Posted
技术标签:
【中文标题】尝试构建 JSON 文件,但将日期时间错误连接到字符串【英文标题】:Trying construc JSON file but got error concat datetime to string 【发布时间】:2021-12-25 06:42:34 【问题描述】:我没有太多使用 python 的经验,我试图在数据库中运行一个查询,它会返回数字、状态、开放日期、到期日期和描述等字段,但我收到一个错误即使在编码时,下面是我的代码,他们能否帮助我解决我做错的事情
json_requisicoes.append('Numero Requisicao:'+row[0], 'Status:'+row[1], 'Data de Abertura:'+row[2], 'Prazo:'+row[3] , 'Descricao:'+row[4])
TypeError: 只能将 str(不是“datetime.datetime”)连接到 str
import mysql.connector
import json
from datetime import datetime
import array as arr
class DateTimeEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, (datetime.datetime, datetime.date, datetime.time)):
return obj.isoformat()
elif isinstance(obj, datetime.timedelta):
return (datetime.datetime.min + obj).time().isoformat()
return super(DateTimeEncoder, self).default(obj)
def GetRequisicoes():
json_requisicoes = []
select_requisicoes = ("""SELECT * FROM data_req
WHERE DATE(sla_due_date_req) <= DATE(NOW())
AND status_req NOT LIKE 'Pendente'
ORDER BY n_req ASC;""")
cursor = conn.cursor()
cursor.execute(select_requisicoes)
result = cursor.fetchall()
for row in result:
json_requisicoes.append('Numero Requisicao:'+row[0], 'Status:'+row[1], 'Data de Abertura:'+row[2], 'Prazo:'+row[3], 'Descricao:'+row[4])
with open("./output_requisicoes.json", 'w', encoding='utf-8') as f:
json.dump(json_requisicoes, f, ensure_ascii=False, indent=4, cls=DateTimeEncoder)
cursor.close()
【问题讨论】:
使用datetime.strftime()
格式化row[2]
。
【参考方案1】:
您不应该连接字符串。你应该附加字典。字典在键和值之间有:
,而不是+
。
您还需要将日期时间格式化为字符串,因为原始日期时间对象无法用 JSON 表示。您可以为此使用isoformat()
方法。
for row in result:
json_requisicoes.append(
'Numero Requisicao': row[0],
'Status': row[1],
'Data de Abertura': row[2].isoformat(),
'Prazo': row[3],
'Descricao': row[4]
)
【讨论】:
我尝试使用但又出现了一个错误。for row in result: json_requisicoes.append('Numero Requisicao:'+row[0], 'Status:'+row[1], 'Data de Abertura:'+row[2].isoformat(), 'Prazo:'+row[3].isoformat(), 'Descricao:'+row[4])
raise TypeError(f'Object of type o.__class__.__name__ ' TypeError: Object of type set is not JSON serializable
您没有将+
更改为:
仔细阅读我的回答。
字典是key: value, key: value
。集是value, value, value
感谢完美!以上是关于尝试构建 JSON 文件,但将日期时间错误连接到字符串的主要内容,如果未能解决你的问题,请参考以下文章
尝试从反应应用程序连接到 graphcool 中继 API 时出现此错误:模块构建失败:错误:没有有效的 GraphQL 端点
Gradle 构建失败,出现错误“等待连接到 Grade 守护程序的超时”