如何在JSON文件中附加字典,同时保持正确的JSON格式

时间:2019-03-12 10:06:06

标签: python json

在我与您讨论我的问题之前,我确定这不是重复的问题,我的问题很独特。

因此,我想使用以下代码在JSON文件中添加字典,请注意k['Process']之类的项目是从单独的JSON文件中提取的,我没有在代码中包含该部分工作正常,并且与我的问题无关。

 import json
 data = {}
 data['numdata'] = []
 with open(r'E:\data\loc.json', 'a') as outfile:
    if (k['Process']) == 'New' and (k['Test']) == 0:
        Num1 = k['Num']
        Time = k['Time']

        data['numdata'].append({
        'Num': Num1,
        'Time': Time
        })


        json.dump(data, outfile, indent=4, sort_keys=False, ensure_ascii=False)

目标是每五分钟运行一次,并使其与数据字典一起附加JSON文件,因此在打开文件时采用附加方式。转储数据时出现问题。看起来像这样:

{
    "numdata": [
        {
            "Num": "000540",
            "Time": "2018-06-14 10:37:13"
        }
    ]
}{
    "numdata": [
        {
            "Num": "002077",
            "Time": "2019-03-08 13:12:35"
        }
    ]
}

自然地,这不是正确的JSON格式,我希望它看起来像这样,以便每次我将JSON附加到numdata dict上时……只有我不知道需要更改什么我当前的代码:

   {
        "numdata": [
            {
                "Num": "000540",
                "Time": "2018-06-14 10:37:13"
            },
            {
                "Num": "002077",
                "Time": "2019-03-08 13:12:35"
            }
        ]
    }

我们非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

当您在其中添加条目时,您的数据字典和numdata列表为空...您什么都没有追加,您肯定需要在numdata列表中加载其中的内容,然后才追加。

编辑:只是为了澄清是否有其他人在寻找答案,我以自己的话说了他的数据字典和numdata列表超出范围。

在原始代码中,用户创建一个新的空字典和列表,然后追加到该字典中,然后将其转储回json中。

数据需要放在某个地方,然后附加到该地方。这是一个小例子:

data = {'list':['apple', 'banana', 'orange']}

def update_data(newitem):
    data = {}
    data['list'] = []
    data['list'].append(newitem)
    print(data)

上面的update_data函数将显示空字典,如下所示:

{'list':[<newitem>]}

我们追求的结果更像是:

{'list':['apple', 'banana', 'orange', <newitem>]}

解决方法是先在相同范围内加载数据,然后再附加到该数据。

def update_data(newitem):
    global data
    data['list'].append(newitem)
    print(data)