使用python将数据追加到JSON文件

时间:2018-11-22 22:09:41

标签: python json python-3.x

我编写了以下python代码来填充JSON文件。

import json

data = {}  
data['people'] = []

for i in range(0,3):
    data['people'].append({
    'name': 'C%d'%(i),
    'div':i,
    'from': 'City%d'%(i)
})

with open('data.txt', 'w') as outfile:  
    json.dump(data, outfile)

但是,我的JSON文件如下所示:

{"people": [{"div":0,"from":,"City0":"name":"C0"},{"div":0,"from":,"City0":"name":"C0"}]}

我的输入顺序与输出的顺序不同。原因是什么,我该如何纠正?

2 个答案:

答案 0 :(得分:0)

之类的输出,是因为json文件实际上并不关心它们的顺序,它们保存数据并与文件目录进行比较。只要您可以访问该文件,并且实际上是该文件,那么一切都很好。您或多或少都希望它完全是您使用json.dumps不可能输入的方式,如果您绝对需要那样,那么Id只需像这样
string='''{"people": [{#arange in order you want it}]}'''
并保存它,就像处理其他任何文件一样。

如果您希望对json进行排序,请尝试在Sorting Json

中找到的内容

答案 1 :(得分:0)

您使用什么python版本?您创建了一个dict,但是在python 3.6之前,插入顺序不被保留。 In python 3.6的插入顺序得以保留,但被视为实现细节,因此不应依赖。 In python 3.7已宣布dict对象的插入顺序保留性质是Python语言规范的正式组成部分。 如果您使用的Python版本低于3.7,请使用集合中的OrderedDict。

import json
from collections import OrderedDict

data = {}
data['people'] = []
for i in range(0,3):
    data['people'].append(OrderedDict((
    ('name', 'C%d' %(i)),
    ('div', i),
    ('from', 'City%d'%(i))
    )))

with open('data.json', 'w') as outfile:  
    json.dump(data, outfile)

顺便说一句,为什么文件的扩展名是txt而不是json?没关系,而且与您的问题无关,但我很好奇。