次のような 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/"
}
}
}
「download_url」k:v を新しい値 (つまり、新しい download_url) に置き換える Python を少し書きました。残念ながら、その json スニペットの 3 つの download_urls のうちの 1 つを置き換えるだけです。理由はわかりますが、解決策を得るのに少し苦労しているので、ここで助けを求めています.
json オブジェクト全体が「データ」なので、次のようにします。
data["ROLE_NAME"]["download_url"] = download_url
download_url は、その変数に割り当てた新しい値です。["download_url"] という名前のキーを更新する必要があります。レイヤーで指定したものではありません。
役立つ私のコードの一部:
コードで以前に取得したいくつかの値を取得し、応答を返す URL を作成します。download_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_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"
再帰的に検索して更新する必要があると思います