2014-10-08 114 views
8

我的json文件看起來喜歡這個,我試圖訪問for循環中的元素syslogTypeError:列表索引必須是整數,而不是字典

{ 
    "cleanup":{ 
    "folderpath":"/home/FBML7HR/logs", 
    "logfilename":"" 
    }, 
    "preparation":{ 
    "configuration":{ 
     "src_configfile":"src.cfg", 
     "dest_configfile":"/var/home/FBML7HR/etc/vxn.cfg" 
    }, 
    "executable_info1":[ 
     { 
     "login_info":{ 
      "hostname":"10.4.0.xxx", 
      "username":"***", 
      "password":"***" 
     } 
     }, 
     { 
     "command":{ 
      "folderpath":"/var/home/FBML7HR/SrcCode/vxnservers/fdchost/north/test/hostsim/", 
      "processname":"northhostsim", 
      "parameters":"-d" 
     } 
     } 
    ], 
    "executable_info2":[ 
     { 
     "login_info":{ 
      "hostname":"10.4.0.xxx", 
      "username":"***", 
      "password":"***" 
     } 
     }, 
     { 
     "command":{ 
      "folderpath":"/var/home/FBML7HR/SrcCode/vxnservers/fdchost/north/build/Linux-2.6.18-194.8.1.el5/bin", 
      "processname":"northhost", 
      "parameters":"-s brazil -d" 
     } 
     } 
    ], 
    "executable_info3":[ 
     { 
     "login_info":{ 
      "hostname":"10.4.0.xxx", 
      "username":"***", 
      "password":"***" 
     } 
     }, 
     { 
     "command":{ 
      "folderpath":"cd /var/home/xxx/SrcCode/vxnservers/fdchost/north/test/vxnclient_mt", 
      "processname":"vxnclient_north_mt", 
      "parameters":"0 320 205 14897 16880 60000 60000 2 2" 
     } 
     } 
    ] 
    }, 
    "execution":[ 
    { 
     "test_case":{ 
     "scriptname":"/var/home/FBML7HR/test/testcase1.sh", 
     "testreport":{ 
      "syslog":"/var/log/messages", 
      "backupsyslog":"backuplogs1.txt", 
      "clientsimlog":"/var/home/FBML7HR/test/out.log", 
      "backupclientsimlog":"Clientlogs1.txt" 
     } 
     } 
    }, 
    { 
     "test_case":{ 
     "scriptname":"/var/home/FBML7HR/test/testcase2.sh", 
     "testreport":{ 
      "syslog":"/var/log/messages", 
      "backupsyslog":"backuplogs2.txt", 
      "clientsimlog":"/var/home/FBML7HR/test/out.log", 
      "backupclientsimlog":"Clientlogs2.txt" 
     } 
     } 
    } 
    ], 
    "verification":{ 
    "testreport":{ 
     "syslog":"/var/log/messages", 
     "backupsyslog":"backuplogs.txt", 
     "reportfilename":"/var/home/FBML7HR/test/out.log", 
     "backuplogfile":"Clientlogs.txt" 
    } 
    } 
} 

我不喜歡這樣寫道:

for i in data['execution']: 
    cmd = data['execution'][i]['test_case']['scriptname'] 

但我得到的錯誤說「類型錯誤:列表索引必須是整數,而不是字典」。 我是python(和json)的新手。有人可以提出我要去哪裏嗎?

+0

顯然'i'是'dict',所以你不能用它來索引'data''execution']'。這不應該只是'我在數據['執行']:cmd = i ['test_case'] ['scriptname']'? – jonrsharpe 2014-10-08 21:06:47

+1

看起來像'data'是一個列表,而不是一本字典。你確定這本詞典沒有封閉的[]嗎? – karthikr 2014-10-08 21:07:51

回答

17

您遍歷的data['execution']引用的名單,指數。

只要使用這些值(字典)直接

for i in data['execution']: 
    cmd = i['test_case']['scriptname'] 

你可能想給一個更有意義的循環名稱:

for entry in data['execution']: 
    cmd = entry['test_case']['scriptname'] 
+0

很好的解釋,謝謝! :) – ocean800 2016-02-23 00:49:01

相關問題