我有一个j
字典列表,我想将一些字典导出为名为myFile.json
的json文件:
for item in j:
if item['start'] = "True":
#If myFile.json exists then append item to myFile.json
#Otherwise create myFile.json that starts with "[" and append item to it
#Append "]" to the myFile.json
我可以使用try
来做到这一点,但我想知道是否有更pythonic的方法来制作它。
我的代码甚至不值得放它。
try:
with io.open(myFile.json, 'a', encoding='utf-8') as f:
f.write(unicode(json.dumps(item, ensure_ascii=False)))
f.write(u",")
except IOError:
with io.open(myFile.json, 'w', encoding='utf-8') as f:
f.write(u"[")
with io.open(myFile.json, 'a', encoding='utf-8') as f:
f.write(unicode(json.dumps(item, ensure_ascii=False)))
f.write(u",")
# ..etc
编辑输出文件应为 json 数组:
[ {"key1":"value1","key2":"value2"},{"key1":"value3","key2":"value4"}]
你的方法有一个严重的缺陷:如果你先写[
,你还需要在你写的每个JSON值后添加,
逗号,你必须附加结束]
,然后你必须在每次附加到文件时删除最后一个]
,或者在阅读时手动添加]
在解码前添加右括号。
您最好不要尝试构建一个大的 JSON 列表,而是使用换行符作为分隔符。这样,您可以自由追加,并且通过逐行读取文件,您可以轻松地再次加载数据。
这具有大大简化代码的额外优势:
with io.open(myFile.json, 'a', encoding='utf-8') as f:
f.write(unicode(json.dumps(item, ensure_ascii=False)))
f.write(u'n')
这样就无需先测试现有文件。阅读就像:
with open(myFile.json) as f:
for line in f:
data = json.loads(line)