繁体   English   中英

Python 3 中的 JSON 库异常

[英]JSON library exception in Python 3

由于 Python 2 API 似乎一团糟 - 从文件系统函数我有时会得到 unicode 字符串,有时会得到标准字符串 - 我现在正在尝试从 Python 2 过渡到 Python 3。但是在这样做时我遇到了关于json模块的问题.

我使用 Python 3.4 运行标准的 Ubuntu 系统。 当我尝试使用 JSON 模块时,我收到以下错误消息:

Traceback (most recent call last):
  File "./sysmon.py", line 227, in <module>
    jsonCfgObj = json.load(json_file, 'utf-8', strict = False)
  File "/usr/lib/python3.4/json/__init__.py", line 268, in load
    parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
  File "/usr/lib/python3.4/json/__init__.py", line 331, in loads
    return cls(**kw).decode(s)
TypeError: 'str' object is not callable

乍一看,这似乎是 Python 3 的 JSON 模块中的一个错误。我简直不敢相信,因为我没有做任何与众不同的事情:我只是阅读了一个非常非常简单的 JSON 配置文件。

您对如何处理此错误有任何想法吗?

Python 2 中json.load的第二个参数是encoding ,但是在 Python 3 中第二个参数是cls并且它必须是None (默认)或JSONDecoder子类。 json.load的签名是现在

json.load(fp, cls=None, ...)

您需要从参数列表中删除'utf-8' (改为将其传递给文件打开器)。


OTOH json.loads仍然encoding参数,但它“被忽略和弃用”。

Python 3中的json.load()不接受二进制文件,因此删除了第二个参数encoding

'utf-8'在这里被解释为cls参数,它与导致您看到的TypeError的编码无关。 json.load()调用中删除'utf-8' ——您应该将编码传递给打开文件的代码:

import json

with open('text.json', encoding='utf-8') as file:
    data = json.load(file)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM