将dicts导出到json文件

时间:2014-02-13 16:21:25

标签: python json list python-2.7 dictionary

我有一个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"}]

1 个答案:

答案 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)