我正在尝试从json文件中读取现有数据,并尝试使用python(我是python新手)将更多数据附加到文件中。这是我在脚本中读取的data.json文件中的现有数据:

{
    "Config1": {
        "TestCase1": {
            "Data1": 200,
            "Data2": 2715
        }
    },
    "Config2": {
        "TestCase1": {
            "Data1": 2710,
            "Data2": 2715
        }
    }
}


阅读后,我想附加TestCase2数据。这就是我在做什么:

with open("data.json") as json_file: #load existing data
    json_data = json.load(json_file)

test='TestCase2'
result=json_data
myConfigs = ['Config1','Config2']
for each, config in enumerate(myConfigs):
    result.update({config:{test:{'Data1':2600,'Data2':2900}}})
with open('data.json', 'a') as outfile:
    json.dump(result, outfile)


jsonLint所指示,data.json中的新数据无效。我究竟做错了什么?这是新数据

{
        "Config1": {
            "TestCase1": {
                "Data1": 200,
                "Data2": 2715
            }
        },
        "Config2": {
            "TestCase1": {
                "Data1": 2710,
                "Data2": 2715
            }
        }
    } {
        "Config1": {
            "TestCase2": {
                "Data1": 2600,
                "Data2": 2900
            }
        },
        "Config2": {
            "TestCase2": {
                "Data1": 2600,
                "Data2": 2900
            }
        }
    }

最佳答案

除了以错误的模式(应为“ w”)打开文件之外,您还通过定义新的dict内联覆盖了旧的“ config”树。

代替:

result.update({config:{test:{'Data1':2600,'Data2':2900}}})


尝试这个:

result[config][test] = {'Data1': 2600, 'Data2': 2900}


这样可以为您的示例提供所需的结果。添加TestCase2时,它将使result['Config1']['TestCase1']保持不变。您可能还需要通过将result[config]设置为{}(如果它是None)来确保配置树存在。

关于python - python:从文件中读取json数据并追加更多数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36512112/

10-09 06:11
查看更多