尝试构建 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 端点

尝试将字符连接到 char* 时引发异常

Gradle 构建失败,出现错误“等待连接到 Grade 守护程序的超时”

错误:在 Docker 中的 Alpine 上安装 psycopg2 时找不到 pg_config 可执行文件

应用内购买被“无法连接到商店”阻止

尝试连接到 MySQL 数据库时出现“db is not defined”错误[关闭]