我的JSON如下所示:
{
"ROLE_NAME": {
"FOO": {
"download_url": "http: //something.staging/12345/buzz.zip"
},
"BAR": {
"download_url": "http: //something.staging/12345/fizz.zip"
},
"download_url": "http: //something.staging/12345/fizzbuzz.zip",
"db_name": "somedb",
"db_server": "dbserver.staging.dmz",
"plugin": {
"server_url": "http: //lab.staging.corp/server/"
}
}
}
我写了一点python,用一个新的值(即新的下载url)替换“download_url”k:v。不幸的是,它只替换了json片段中三个下载url中的一个。我知道为什么,但我有一点困难,得到解决办法,所以我在这里请求帮助。
整个json对象是“data” 所以我就这样做:
data["ROLE_NAME"]["download_url"] = download_url
其中下载url是我分配给该变量的新值 我需要做的是对任何名为[“download_url”]的密钥进行更新,而不是我在要访问的层中指定的密钥。
我的一些代码有助于:
我在代码中获取一些先前获得的值,并构建一个返回响应的url。我从响应中提取一个值,该值将用于生成下载url的值
buildinfo_url = "http://something.staging/guestAuth/app/rest/builds/?locator=buildType:%s,tags:%s,branch:branched:any" % (
bt_number,
list_json_load[role_name][0]['tag']
)
发送HTTP请求
client = httplib2.Http()
response, xml = client.request(buildinfo_url)
从响应xml中提取一些值并设置download\u url变量
doc = ElementTree.fromstring(xml)
for id in doc.findall('build'):
build_id = "%s" % (id.attrib['id'])
try:
download_url = "http://something.staging/guestAuth/repository/download/%s/%s:id/%s" % (
bt_number,
build_id,
build_artifact_zip
)
data[role_name]["download_url"] = download_url
except NameError:
print "something"
我想我应该递归地搜索和更新
使用递归
输出:
相关问题 更多 >
编程相关推荐