Python不解码JSON,因为“编码”是一个意想不到的参数

我有一个 Django 2.2.23 应用程序,在 Python 3.9.4 上运行。我有 django-extensions 2.2.9。

我有一个具有django_extensions.db.fields.json.JSONField属性的模型(AFAIK,它只是一个自动序列化的文本字段)。我提到这一点是因为当 JSON 被反序列化时,django-extensions 库会这样做:

def loads(txt):
    value = json.loads(
        txt,
        encoding=settings.DEFAULT_CHARSET
    )
    return value

问题是导入的库import json在以这种方式调用时给了我一个错误:

Python 3.9.4 (default, Apr  5 2021, 01:50:46)
[Clang 12.0.0 (clang-1200.0.32.29)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import json
>>> json.loads("{}", encoding="UTF-8")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/Cellar/python@3.9/3.9.4/Frameworks/Python.framework/Versions/3.9/lib/python3.9/json/__init__.py", line 359, in loads
    return cls(**kw).decode(s)
TypeError: __init__() got an unexpected keyword argument 'encoding'
>>>

最终结果是我无法JSONField从数据库加载任何包含 a 的记录,因为 JSONDecoder 无法处理传递的encoding参数。

我的印象是 Python 的 json 库是 simplejson。但是查看它的来源,它确实处理encoding. 但是,如果我看的JSON库“/usr/local/Cellar/python@3.9/3.9.4/Frameworks/Python.framework/Versions/3.9/lib/python3.9/json/初始化的.py”(如指定在上面的错误中),这个解码器绝对没有。

这显然是不正确的行为,但我不知道我需要升级什么才能使正确的事情发生。

回答

您看到此错误是因为该参数encoding已从json.loadsPython 3.9 中删除(自 Python 3.1 起已弃用)。

您使用的版本django-extensions 2.2.9于2020年3月发布,Python 3.9于2020年10月发布。

这个特殊问题应该在 django-extensions 3.0 中修复,但是 Python 3.9 只被添加到 django-extensions 3.1.1 的测试套件中,所以我建议更新到最新版本。


以上是Python不解码JSON,因为“编码”是一个意想不到的参数的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>