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

Kum*_*ran 97 python json python-2.7

我在这个官方文档中搜索,找到python中json.dump()和json.dumps()之间的区别.很明显,它们与文件写入选项有关.
但是它们之间的细微差别是什么?在什么情况下,一个人比其他人更有优势呢?

Joã*_*ves 111

除了文档所说的内容之外,没有其他任何东西可以添加.如果你想将JSON转储到文件/套接字或其他什么,那么你应该去dump().如果您只需要它作为字符串(用于打印,解析或其他),那么使用dumps()(转储字符串)

正如Antii Haapala在这个答案中提到的那样,ensure_ascii行为上存在一些细微差别.这主要是由于底层write()函数的工作原理,因为它运行成块而不是整个字符串.检查答案以获取更多详细信息.

json.dump()

将obj序列化为JSON格式的流到fp(.write() - 支持类文件对象

如果ensure_ascii为False,则写入fp的一些块可能是unicode实例

json.dumps()

将obj序列化为JSON格式的str

如果ensure_ascii为False,则结果可能包含非ASCII字符,返回值可能是unicode实例


Pra*_*thi 30

带有s字符串参数的函数.其他人采用文件流.


Ant*_*ala 6

Python 2中的一个显着差异是,如果您使用ensure_ascii=False,则dump可以将UTF-8编码的数据正确写入文件中(除非您使用的扩展名不是UTF-8的8位字符串):

dumps另一方面,with ensure_ascii=False可以产生a strunicode仅取决于您用于字符串的类型:

使用此转换表将obj序列化为JSON格式的str。如果sure_ascii为False,则结果可能包含非ASCII字符,并且返回值可能是unicodeinstance

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

因此,如果不检查返回的格式并可能使用,就不能使用其返回值将结构保存到文件中unicode.encode

当然,这不再是Python 3中的有效考虑,因为不再有这种8位/ Unicode的混淆。


至于loadvs loadsload整个文件视为一个JSON文档,因此您不能使用它从单个文件中读取多个换行限制的JSON文档。


Jen*_*aKh 6

在内存使用和速度上。

调用时,jsonstr = json.dumps(mydata)它首先在内存中创建数据的完整副本,然后才将file.write(jsonstr)其复制到磁盘。因此,这是一种更快的方法,但是如果要保存大量数据,可能会成为问题。

当调用json.dump(mydata, file)-不带's'时,不使用新的内存,因为数据是按块转储的。但是整个过程要慢大约2倍。

来源:我检查了json.dump()和的源代码,json.dumps()还测试了两个变量,它们测量了time.time()htop中的时间并观察了它们的内存使用情况。