我正在尝试使用python脚本读取和写入json文件(我已经将这个python块嵌入到shell脚本中)。
test.json
{ "environments":“开发”,"qa","load","prod","region":“亚洲”,“欧洲”,“美洲”,“亚太地区”,“产品”:“手机”,“互联网”,"kiosk",“分支”,"ID":“手机:111”,“互联网:222”,"kiosk:333",“分支:444”}
我正在尝试添加区域(英国),在此之前,我想检查并添加,如果它在列表中不可用。下面是我的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文件,但它删除了我看到的其他lists.The输出
{
"region": [
"asia",
"europe",
"americas",
"asia-pacific",
"uk"
]
}
发布于 2018-07-03 07:51:08
只需保持它的简单性,并且仅当reg_val
与in
操作符一起存在时才追加。然后你可以直接转储到另一个文件。
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
{
"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"
]
}
发布于 2018-07-03 07:53:29
这是因为您正在向文件写入a_dict
,该文件被初始化为一个空dict
,然后只有data["region"]
插入其中。
我提供了一些代码作为示例,但RoadRunner抢先一步(嘿,他相当快!)。您还需要小心您的文件处理,因为您有一个读文件处理程序同时打开一个写文件处理程序-这可能是危险的。
发布于 2018-07-03 07:51:16
删除其他列表的原因是因为您使用的是写入模式而不是追加模式。当您重新打开test.json文件时,使用代码open('test.json', 'a')
附加到test.json,而不覆盖之前编写的内容。
编辑:正如评论中提到的,它不适合附加到json文件。取而代之的是,在一个转储中编写所有内容。我推荐RoadRunner的方法。
https://stackoverflow.com/questions/51144869
复制相似问题