我应该在Python中使用带有.write()函数的JSON.dumpS还是json.dump()

问题描述 投票:0回答:4

有区别吗

object = {1:"one", 2:"two", 3:"three"}
file.write(json.dumps(object))

json.dump(object)
。如果不是,我应该使用哪一个?哪一种是最佳实践?我听说他们做了同样的事情,并且想在我的代码中使用第一个而不是后者。我正在使用它写入 JSON 文件。

python json dump
4个回答
6
投票

直接转储 JSON (

json.dump
) 会在创建文件时将序列化输出“即时”写入文件中。另一方面,转储到字符串 (
json.dumps
) 然后将字符串写入文件是按顺序发生的,因此在整个对象在内存中序列化之前不会将任何内容写入文件。

实际上,这对于大小合理的 JSON 来说影响很小。除非您的 JSON 至少有几兆字节并且您关心性能,否则请使用使代码更简洁的任何内容。


0
投票

json.dump
更符合人体工程学且对眼睛更友好,因为它比
json.dumps
更短并且更能传达其含义。


0
投票

在大多数情况下,这两种方法是等效的,但是有一个重要的区别。

json.dump
可以迭代数据并在迭代时将其写出文件,其中
json.dumps
必须返回完整的字符串以便您写入输出:

import json
values = list(range(1000000))
with open("test.json", "w") as f:
    # Maximum resident set size (kbytes): 62960
    # f.write(json.dumps(values))
    # Maximum resident set size (kbytes): 46828
    json.dump(values, f)

在某些极端情况下,这会导致更多的内存使用,如果您处于资源受限的情况,这可能会导致问题。

最好避免出现此问题,除非您有令人信服的理由使用

json.dumps
输出到文件。


0
投票

根据我的经验,json.dump 的时间可能比 json.dumps + f.write 长几个数量级。

json_str = json.dumps(data,)

花费:5.81秒

with open('/tmp/jpg_coco.json', 'w') as jf:

jf.write(json_str)

用了0.29秒

但是:

json.dump(data, filename)

花费:223.60s

这可能取决于写入媒体延迟(例如网络存储)。 当每个写入操作都有相关开销时,首先组合字符串然后立即将其写入磁盘可能是有意义的。

© www.soinside.com 2019 - 2024. All rights reserved.