使用python编写json文件

使用python编写json文件,python,json,Python,Json,我正在尝试使用python脚本读取和编写json文件。我已将此python块嵌入到shell脚本中 test.json 我试图添加regionuk,在此之前我想检查并添加它是否在列表中不可用。 下面是我的python代码,我可以更新该值 reg_val="uk" a_dict = {} try: with open('test.json') as data_file: data = json.load(data_file) temp_list = []

我正在尝试使用python脚本读取和编写json文件。我已将此python块嵌入到shell脚本中

test.json

我试图添加regionuk,在此之前我想检查并添加它是否在列表中不可用。 下面是我的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
我能够更新json文件,但它删除了其他列表

{
    "region": [
        "asia", 
        "europe", 
        "americas", 
        "asia-pacific", 
        "uk"
    ]
}

只需保持简单,并且仅当带有in运算符的regu val存在时才进行追加。然后您可以直接转储到另一个文件

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)
这将给出以下out.json:


只需保持简单,并且仅当带有in运算符的regu val存在时才进行追加。然后您可以直接转储到另一个文件

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)
这将给出以下out.json:


删除其他列表的原因是您使用的是写入模式而不是追加模式。当您重新打开test.json文件时,使用open'test.json',a'代码附加到test.json,而不覆盖您以前编写的内容


编辑:如注释中所述,不适合附加到json文件。相反,在一个转储中写入所有内容。我推荐RoadRunner的方法。

删除其他列表的原因是因为您使用的是写入模式而不是附加模式。当您重新打开test.json文件时,使用open'test.json',a'代码附加到test.json,而不覆盖您以前编写的内容


编辑:如注释中所述,不适合附加到json文件。相反,在一个转储中写入所有内容。我推荐RoadRunner的方法。

这是因为您正在向文件中写入一个dict,它被初始化为一个空dict,然后只在其中插入了数据[region]


我提供了一些代码作为示例,但RoadRunner比我快了嘿,他跑得很快!。您还需要小心处理文件,因为读文件处理程序与写文件处理程序同时打开-这可能很危险。

这是因为您正在向文件写入一个dict,该文件初始化为空dict,然后只插入了数据[region]


我提供了一些代码作为示例,但RoadRunner比我快了嘿,他跑得很快!。您还需要小心处理文件,因为读文件处理程序与写文件处理程序同时打开-这可能很危险。

为什么不将数据写回文件而不是只包含区域的新dict?为什么不将数据写回文件而不是dict,这是一个只包含区域的新dict。但这将附加列表的json表示,包括外部大括号{。这将在以后导致错误。好的一点,我将编辑我的帖子来提及这一点。我打算建议跟踪有问题的行,然后重新编写整个内容,包括该行,但是@RoadRunner也击败了我,但这将附加列表的json表示,包括外部大括号{。这将在以后导致错误。好的观点,我将编辑我的帖子来提及这一点。我打算建议跟踪有问题的行,然后重写整个内容,包括那行内容,但是@RoadRunner也击败了我到itMeep Meep,你太快了!Meep Meep,你太快了!
{
    "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"
    ]
}