2016-08-24 97 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

谢谢你:-) 像一个魅力工作 –