我有一个dicts j
列表,我想将一些dicts导出为名为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"}]
答案 0 :(得分:4)
你的方法有一个严重的缺陷:如果你先写[
,你还需要在你写的每个JSON值后添加,
逗号,你必须追加结束]
,然后每次附加到文件时都必须删除最后]
,或者在解码之前手动添加]
结束括号。
你会更好地不尝试构建一个大的JSON列表,而是使用换行符作为分隔符。这样您就可以自由添加,reading your file line-by-line可以轻松地再次加载数据。
这具有极大简化代码的附加优势:
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)