繁体   English   中英

python:从文件中读取json数据并追加更多数据

[英]python: read json data from file and append more data

我正在尝试从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
            }
        }
    }

问题是您要在此处将新的JSON附加到原始JSON文件中:

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

因此,您可以在同一文件中看到两个JSON对象:

...
            "Data2": 2715
        }
    }
} {  <--- original object ends here, new object starts here
    "Config1": {
...

JSONLint和任何JSON解析器都期望有一个对象。

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

代替:

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

尝试这个:

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

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

主要问题是,如果dict2存在dict1.update(dict2)方法, dict1覆盖dict1键,因此文件中的第二个对象没有key => TestCase1

另一个问题是(如上所述)该文件以错误的方式打开(应该为w ),作为对json文件a追加

您可以尝试以下方法:

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

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

只是result[config].update(...而不是result.update({config:...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM