Answers:
除了文档所说的内容外,没有什么可添加的。如果要将JSON转储到文件/套接字或其他文件中,则应使用dump()
。如果只需要它作为字符串(用于打印,解析或其他操作),则使用dumps()
(转储字符串)
正如Antii Haapala在此答案中提到的,在ensure_ascii
行为上有一些细微的差异。这主要是由于底层write()
函数是如何工作的,因为它是对块而不是整个字符串进行操作。检查他的答案以获取更多详细信息。
json.dump()
将obj作为JSON格式的流序列化到fp(支持.write()的类似文件的对象
如果ensure_ascii为False,则写入fp的某些块可能是unicode实例
json.dumps()
将obj序列化为JSON格式的str
如果sure_ascii为False,则结果可能包含非ASCII字符,并且返回值可能是unicode实例
与功能s
取字符串参数。其他则采用文件流。
Python 2的一个显着差异是,如果您使用ensure_ascii=False
,则dump
可以将UTF-8编码的数据正确写入文件中(除非您使用的扩展名不是UTF-8的8位字符串):
dumps
另一方面,with ensure_ascii=False
可以产生a str
或unicode
仅取决于您用于字符串的类型:
使用此转换表将obj序列化为JSON格式的str。如果sure_ascii为False,则结果可能包含非ASCII字符,并且返回值可能是
unicode
instance。
(强调我的)。请注意,它可能仍然是一个str
实例。
因此,如果不检查返回的格式以及可能使用的格式,就无法使用其返回值将结构保存到文件中unicode.encode
。
当然,这在Python 3中不再是有效的问题,因为不再存在这种8位/ Unicode的混淆。
至于load
VS loads
,load
认为整个文件是一个JSON文件,所以你不能用它来从单个文件读取多个新行限制JSON文件。
json.dumps([b'123'])
-> TypeError
。