python中json.dump()和json.dumps()的区别是什么?

What is the difference between json.dump() and json.dumps() in python?

我在这个官方文档中搜索,以找出python中json.dump()和json.dumps()之间的区别。很明显,它们与文件写入选项相关。但它们之间的具体区别是什么?在什么情况下,一方比另一方更具优势?


除了医生说的以外,没有什么可以补充的。如果您想将JSON转储到一个文件/套接字或其他地方,那么您应该使用dump()。如果您只需要它作为一个字符串(用于打印、解析或其他),那么使用dumps()(dump string)

正如安提哈帕拉在这个答案中提到的,在以东人的行为上有一些微小的差异。这主要是由于底层write()函数是如何工作的,因为它以块而不是整个字符串的形式工作。请查看答案以了解更多详细信息。

json.dump()

Serialize obj as a JSON formatted stream to fp (a .write()-supporting file-like object

If ensure_ascii is False, some chunks written to fp may be unicode instances

json.dumps()

Serialize obj to a JSON formatted str

If ensure_ascii is False, the result may contain non-ASCII characters and the return value may be a unicode instance


带有s的函数接受字符串参数。其他人存档溪流。


python 2的一个显著区别是,如果使用ensure_ascii=Falsedump将正确地将utf-8编码的数据写入文件(除非使用扩展字符不是utf-8的8位字符串):

另一方面,使用ensure_ascii=False可以生成strunicode,这取决于用于字符串的类型:

Serialize obj to a JSON formatted str using this conversion table. If ensure_ascii is False, the result may contain non-ASCII characters and the return value may be a unicode instance.

(强调我的)。注意,它可能仍然是一个str实例。

因此,如果不检查格式被返回,可能与unicode.encode一起播放。

当然,这在Python3中不再是有效的问题,因为不再存在这种8位/unicode混淆。

对于loadloads的情况,load认为整个文件是一个JSON文档,因此不能用它从一个文件中读取多个新行限制的JSON文档。