Python 中的 json.dump ()和 json.dump ()有什么区别?

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

123794 次浏览

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

正如 安蒂哈帕拉在这个答案所提到的,在 ensure_ascii行为上有一些细微的差别。这主要是由于底层 write()函数的工作方式,因为它对块而不是整个字符串进行操作。看看他的回答,了解更多细节。

json.dump()

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

如果 sure _ ascii 为 False,写入 fp 的某些块可能是 unicode 实例

json.dumps()

将 obj 序列化为 JSON 格式的 str

如果 sure _ ascii 为 False,则结果可能包含非 ASCII 字符,并且返回值可能是 Unicode 实例

s结尾的函数接受字符串参数 流或指向文件的指针。

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

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

使用这个转换表将 obj 序列化为 JSON 格式的 str。如果 sure _ ascii 为 False,则结果可能包含非 ASCII 字符和返回值 可能是 unicode实例

注意,它也可能是一个 str实例。

因此,您不能使用它的返回值将结构保存到文件中,而不检查是哪个 格式被返回,并且可能正在使用 unicode.encode

在 Python3中,这当然不再是有效的关注点,因为不再存在这种8位/Unicode 混淆。


对于 loadloadsload认为 完整文件是一个 JSON 文档,因此不能使用它从单个文件读取多个换行有限的 JSON 文档。

在内存使用和速度方面。

当您调用 jsonstr = json.dumps(mydata)时,它首先在内存中创建数据的完整副本,然后才将其 file.write(jsonstr)到磁盘。所以这是一个更快的方法,但是如果你需要保存大量的数据,这可能是一个问题。

当您调用 json.dump(mydata, file)——没有‘ s’时,不会使用新的内存,因为数据是通过块转储的。但是整个过程要慢2倍。

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