将对象转储到JSON文件的两种方法之间有什么区别吗?

时间:2015-06-11 07:06:05

标签: python json python-2.7

方法1:

json.dump(object, file('object.json', 'w'))

方法2:

f = file('object.json', 'w')
json.dump(object, f)
f.close()

我经常使用方法2将对象转储到json文件,但它看起来很难看。方法1看起来很好而且清晰,但是我觉得将文件对象作为参数打开是否正确,在对象存储在JSON文件中后谁将控制该对象?

3 个答案:

答案 0 :(得分:2)

  

我感到困惑的是,打开一个文件对象作为参数是否正确,谁将在对象存储在json文件中后控制该对象?

没有人控制;您在方法1的file调用中创建的json.dump会在该行之后留下范围,因此会隐式关闭。因此两种方法都是等价的。

如果您想要更详细,我建议您使用context manager

with file('object.json', 'w') as f:
    json.dump(object, f)

这可以确保在块结束时始终正确关闭文件,即使在发生错误时控制权传递给任何异常处理程序之前也是如此。

答案 1 :(得分:1)

我想说 没有太多区别,但从可读性的角度来看,第二种方法可以被认为更好; Readability counts.

在您的示例中,用于打开文件的文件名和模式是硬编码字符串。如果它们都是变量名(因为它们很可能是在现实世界中的例子),我觉得方法#1在阅读时会更难解析。

另一个观察是使用方法#1,你将无法继续写入该文件对象,因为你没有引用它的变量;您需要重新打开它才能追加更多数据。

答案 2 :(得分:1)

它们在内部是相同的,您可以检查源代码。