def loads(s, *, encoding=None, cls=None, object_hook=None, parse_float=None,
parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):
"""Deserialize ``s`` (a ``str``, ``bytes`` or ``bytearray`` instance
containing a JSON document) to a Python object.
...
"""
if isinstance(s, str):
if s.startswith('\ufeff'):
raise JSONDecodeError("Unexpected UTF-8 BOM (decode using utf-8-sig)",
s, 0)
else:
if not isinstance(s, (bytes, bytearray)):
raise TypeError(f'the JSON object must be str, bytes or bytearray, '
f'not {s.__class__.__name__}')
s = s.decode(detect_encoding(s), 'surrogatepass')
6条答案
按热度按时间4ngedf3f1#
是的,
s
代表字符串。json.loads
函数不接受文件路径,而是将文件内容作为字符串。请看the documentation。uqxowvwt2#
在大家解释的基础上再加一个简单的例子,
json.load()
json.load
可以反序列化文件本身,即它接受file
对象,例如,将输出,
如果我使用
json.loads
来打开一个文件,我会得到这个错误:
TypeError:应为字符串或缓冲区
json.loads()
json.loads()
反序列化字符串。因此,为了使用
json.loads
,我必须使用read()
函数传递文件的内容,例如,使用
content.read()
和json.loads()
返回文件的内容,输出,
这是因为
content.read()
的类型是字符串,即<type 'str'>
如果我使用
json.load()
和content.read()
,我会得到错误,给予,
属性错误:“str”对象没有属性“read”
所以,现在你知道了
json.load
反序列化文件和json.loads
反序列化字符串。另一个例子,
sys.stdin
返回file
对象,所以如果我执行print(json.load(sys.stdin))
,我将获得实际的json数据,如果我想使用
json.loads()
,我会使用print(json.loads(sys.stdin.read()))
。kqlmhetl3#
文档非常清楚:https://docs.python.org/2/library/json.html
使用此转换表将fp(一个包含JSON文档的.read()支持文件类对象)反序列化为Python对象。
使用此转换表将s(包含JSON文档的str或unicode示例)反序列化为Python对象。
所以
load
是一个文件,loads
是一个string
ca1c2owp4#
快速解答(非常简单!)
json.load()获取FILE
json.load()需要一个文件(文件对象)--例如,你之前打开的文件,由filepath给出,比如
'files/example.json'
。json.loads()接受一个STRING
json.loads()需要一个(有效的)JSON字符串-即
{"foo": "bar"}
示例
假设你有一个文件example.json,内容如下:{“key_1”:1,“key_2”:“foo”,“Key_3”:空}
irtuqstp5#
在python3.7.7中,根据cpython source code,json.load的定义如下:
load实际上调用了json.loads并使用
fp.read()
作为第一个参数。如果你的代码是:
这样做也是一样的:
但是如果您需要指定从文件阅读的字节数,比如
fp.read(10)
,或者您想要反序列化的字符串/字节数不是来自文件,那么您应该使用json.loads()至于json.loads(),它不仅反序列化string,还反序列化bytes。如果
s
是bytes或bytearray,则会先解码为string。您也可以在源代码中找到。zpgglvta6#
区别在于JSON文本的源
load()期望从一个类似文件的对象中获取文本json.loads()期望从一个字符串对象中获取文本
假设您有一个包含以下内容的文件(json.txt
现在学习以下内容:
现在使用字符串
在第一部分中,我们使用json.load()直接读取文件,在section部分中,我们首先将文件的内容读入一个字符串变量,然后将该变量传递给json.loads()
同样的关系也适用于json.dump()和json.dumps()