导入flask-mongoengine时遇JSONEncoder导入错误,求冲突解决方法
解决Flask 2.3.2与flask-mongoengine 1.0.0的JSONEncoder导入冲突
你的初始化代码:
from flask import Flask from config import Config from flask_mongoengine import MongoEngine app = Flask(__name__) app.config.from_object(Config) db = MongoEngine() db.init_app(app) from application import routes
执行导入时触发错误:
ImportError: cannot import name 'JSONEncoder' from 'flask.json'
问题根源是Flask 2.3.x重构了JSON模块,将JSONEncoder从flask.json迁移到了flask.json.provider,而你使用的flask-mongoengine 1.0.0版本未适配该变更,导致导入失败。以下是三种解决方法:
方法1:升级flask-mongoengine到兼容版本
这是最推荐的长期解决方案,flask-mongoengine 2.0.0及以上版本已适配Flask 2.x的新结构。执行升级命令:
pip install --upgrade flask-mongoengine>=2.0.0
方法2:降级Flask到兼容版本
如果暂时无法升级flask-mongoengine,可以将Flask降级到2.2.x系列(该版本仍保留flask.json.JSONEncoder):
pip install Flask==2.2.5
降级后需确认其他依赖(如Flask-WTF)是否兼容当前Flask版本。
方法3:临时补丁(仅用于测试/紧急场景)
不推荐用于生产环境,但可临时绕过导入问题。在导入flask-mongoengine之前,手动映射JSONEncoder:
# 先添加补丁代码 from flask.json.provider import JSONEncoder import flask.json flask.json.JSONEncoder = JSONEncoder # 再执行原导入逻辑 from flask import Flask from config import Config from flask_mongoengine import MongoEngine app = Flask(__name__) app.config.from_object(Config) db = MongoEngine() db.init_app(app) from application import routes
内容的提问来源于stack exchange,提问作者Andrei Niță
相关产品推荐
相关产品推荐

