使用python编写json文件

Mow*_*gli 1 python json

我正在尝试使用python脚本读取和编写json文件(我在shell脚本中嵌入了这个python块)

test.json

{
  "environments": ["dev", "qa", "load", "prod"],
  "region": ["asia", "europe", "americas", "asia-pacific"],
  "product": ["mobile", "internet", "kiosk", "branch"],
  "ID": ["mobile:111", "internet:222", "kiosk:333", "branch:444"]
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试添加区域(英国),在此之前我想检查并添加它是否在列表中不可用.下面是我的python代码,我可以更新值

reg_val="uk"

a_dict = {}
try:
    with open('test.json') as data_file:
        data = json.load(data_file)
        temp_list = []
        for dicObj in data["region"]:
            temp_list.append(dicObj)
        temp_list.append(reg_val)
        data["region"] = temp_list
        a_dict["region"] = data["region"]
        with open('test.json','w') as f:
            f.write(json.dumps(a_dict, indent=4, sort_keys=True, encoding="utf-8"))
except IOError as io:
    print "ERROR: ", io
Run Code Online (Sandbox Code Playgroud)

我能够更新json文件,但它删除了其他列表.我看到的输出是

{
    "region": [
        "asia", 
        "europe", 
        "americas", 
        "asia-pacific", 
        "uk"
    ]
}
Run Code Online (Sandbox Code Playgroud)

Roa*_*ner 6

保持简单,只有reg_valin运营商一起存在才附加.然后你可以转储到另一个文件.

import json

reg_val = "uk"

with open('test.json') as in_file, open('out.json', 'w') as out_file:
    data = json.load(in_file)
    if reg_val not in data['region']:
        data['region'].append(reg_val)

    json.dump(data, out_file, indent=4, sort_keys=True)
Run Code Online (Sandbox Code Playgroud)

这给出了以下out.json:

{
    "ID": [
        "mobile:111",
        "internet:222",
        "kiosk:333",
        "branch:444"
    ],
    "environments": [
        "dev",
        "qa",
        "load",
        "prod"
    ],
    "product": [
        "mobile",
        "internet",
        "kiosk",
        "branch"
    ],
    "region": [
        "asia",
        "europe",
        "americas",
        "asia-pacific",
        "uk"
    ]
}
Run Code Online (Sandbox Code Playgroud)