【问题标题】:Appending data to JSON file with python使用python将数据附加到JSON文件
【发布时间】:2018-11-22 22:09:41
【问题描述】:

我编写了以下 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"}]}

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

【问题讨论】:

  • 什么命令?您是指对象中键的顺序吗?为什么这对你很重要? AFAIK,根据 JSON 规范,对象本质上是无序的,你当然不应该依赖任何特定的顺序。如果您确实关心顺序,请使用 JSON 数组

标签: python json python-3.x


【解决方案1】:

你使用什么 python 版本?您创建了一个字典,但在 python 3.6 之前,插入顺序没有被保留。 In python 3.6 插入顺序被保留,但它被视为实现细节,不应依赖。 In python 3.7 dict 对象的插入顺序保存特性已被声明为 Python 语言规范的官方部分。 如果您使用低于 3.7 的 python 版本,请使用集合中的 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?没关系,和你的问题无关,但我很好奇。

【讨论】:

    【解决方案2】:

    你的输出是这样的原因是因为 json 文件并不真正关心它们的顺序,它们保存数据并与文件目录进行比较。只要您可以访问文件并且它实际上就是文件,一切都很好。您或多或少希望它完全是您输入的方式,这对于 json.dumps 来说是不可能的,如果您绝对需要这种方式,我只需创建一个字符串,如
    string='''{"people": [{#arange in order you want it}]}'''
    并保存它任何其他文件。

    如果你想对你的 json 进行排序,试试我在这里找到的东西 Sorting Json

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-15
      • 2018-05-14
      • 2021-10-01
      • 2018-02-22
      • 2012-10-11
      • 2022-01-06
      相关资源
      最近更新 更多