Flask开发API时Pandas datetime转JSON后变为数字如何解决
Flask接口datetime类型转JSON变为时间戳问题解决方案
问题原因
- pandas的
DataFrame.to_json()方法对datetime类型的默认序列化策略是转换为毫秒级Unix时间戳,控制台打印DataFrame时看到的格式化日期是pandas为了可读性做的展示优化,并不影响序列化为JSON时的默认行为。 - 后续的
json.loads再json.dumps操作只是透传了已经转成数字的时间戳,没有做额外格式转换,因此接口最终返回数字格式的时间戳。
修复方案
方案1:修改to_json的日期序列化参数(最简方案)
调用to_json时指定date_format参数控制日期输出格式,比如要输出%Y-%m-%d格式的年月日,修改代码如下:
# 替换原有result = df.to_json(orient="records") 行 result = df.to_json(orient="records", date_format='%Y-%m-%d')
修改后可以直接返回result,不需要再做json.loads+json.dumps的多余序列化/反序列化操作,性能更好。
方案2:提前将日期列转为字符串格式
日期计算完成后,直接把datetime列转成指定格式的字符串,后续转JSON时会自动保留字符串格式:
df['New_date_start'] = df['New_date_start'] - pd.DateOffset(years=1) - pd.DateOffset(days=1) # 新增以下行,将datetime列转成目标格式字符串 df['New_date_start'] = df['New_date_start'].dt.strftime('%Y-%m-%d')
该方案可完全自定义日期输出格式,适配不同业务需求。
可选优化建议
当前代码用json.dumps(parsed)返回响应不符合Flask最佳实践,建议改用Flask自带的jsonify方法,它会自动设置正确的Content-Type: application/json响应头,还会自动处理编码问题:
# 处理完数据后直接返回即可 return jsonify(parsed)
保留你现有配置的app.config['JSON_AS_ASCII'] = False即可避免中文乱码问题。
内容的提问来源于stack exchange,提问作者Teemo
相关产品推荐
相关产品推荐

