2016-08-24 32 views
0

我試圖用另一個鍵的值替換一個鍵的值;但我嘗試了多種方式,似乎並不奏效。python json,用以下示例中的鍵和值對替換值

下面是我的代碼

d = { 
    "name" : "ABC", 
    "type" : "Service", 
    "clusterRef" : { 
    "clusterName" : "ABCSTUFF" 
    }, 
    "serviceState" : "STARTED", 
    "healthChecks" : [ { 
    "name" : "STORAGE", 
    "summary" : "GOOD" 
    }, { 
    "name" : "CPU UTILIZATION", 
    "summary" : "GOOD" 
    } ], 
    "maintenanceMode" : "false" 
} 


######################## 
## Get Key Value 

def get_key_values(d, key): 
    for k, v in d.items(): 
    if k == "name": 
     k = (key + "." + v) 
    else: 
     k = (key + "." + k) 
    if isinstance(v, dict): 
     get_key_values(v, k) 
    elif isinstance(v, list): 
     for i in v: 
      get_key_values(i, k) 
    else: 
     print ("{0} : {1}".format(k, v)) 


get_key_values(d, "TTS") 

結果拿出像下面

TTS.serviceState : STARTED 
TTS.type : Service 
TTS.ABC : ABC 
TTS.clusterRef.clusterName : ABCSTUFF 
TTS.healthChecks.summary : GOOD   <<< remove this line and replace "Good" with the value for "TTS.healthChecks.STORAGE" 
TTS.healthChecks.STORAGE : STORAGE 
TTS.healthChecks.summary : GOOD   <<< remove this line and replace "Good" with the value for "TTS.healthChecks.CPU UTILIZATION" 
TTS.healthChecks.CPU UTILIZATION : CPU UTILIZATION 
TTS.maintenanceMode : false 

,但我想要的結果是繼

TTS.serviceState : STARTED 
TTS.type : Service 
TTS.ABC : ABC 
TTS.clusterRef.clusterName : ABCSTUFF 
TTS.healthChecks.STORAGE : GOOD     <<< 
TTS.healthChecks.CPU UTILIZATION : GOOD   <<< 
TTS.maintenanceMode : false 

任何幫助深表感謝

+0

您能夠重組數據,或者你有在該數據的工作確切格式? – BingsF

+0

nope,無法重新構造數據,因爲它正在從外部API獲取 –

+0

您是否嘗試過使用'json'庫並修改從加載json時獲得的字典? – zachyee

回答

1

這裏有一個非一般的解決方案,適用於你的問題:

d = { 
    "name": "ABC", 
    "type": "Service", 
    "clusterRef": { 
     "clusterName": "ABCSTUFF" 
    }, 
    "serviceState": "STARTED", 
    "healthChecks": [{ 
     "name": "STORAGE", 
     "summary": "GOOD" 
    }, { 
     "name": "CPU UTILIZATION", 
     "summary": "GOOD" 
    }], 
    "maintenanceMode": "false" 
} 


######################## 
# Get Key Value 

def get_key_values(d, key): 
    for k, v in d.items(): 
     if k == "name": 
      k = (key + "." + v) 
     else: 
      k = (key + "." + k) 

     if isinstance(v, dict): 
      get_key_values(v, k) 
     elif isinstance(v, list): 
      for i in v: 
       tok1 = k + "." + i.get("name") 
       tok2 = i.get("summary") 
       print("{0} : {1}".format(tok1, tok2)) 
     else: 
      print("{0} : {1}".format(k, v)) 

get_key_values(d, "TTS") 
+0

謝謝你:-) 像一個魅力工作 –