2014-10-08 14 views
8

Meine JSON-Datei aussehen mag dies und ich versuche, das Element syslog in einer for-Schleife zugreifen.TypeError: Liste Indizes müssen Ganzzahlen, nicht dict

{ 
    "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" 
    } 
    } 
} 

Ich mache es wie folgt aus:

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

Aber ich erhalte die Fehlermeldung, dass "Typeerror: Liste Indizes ganze Zahlen sein müssen, nicht dict". Ich bin neu in Python (und Json auch). Könnte jemand vorschlagen, wo ich falsch liege?

+0

Offensichtlich 'I' ist ein' dict', Sie können es also nicht verwenden, um in 'Daten ['Ausführung'] 'zu indizieren. Sollte das nicht einfach "für i in data ['execution'] sein: cmd = i ['test_case'] ['scriptname']'? – jonrsharpe

+1

sieht aus wie 'Daten' ist eine Liste und kein Wörterbuch. Sind Sie sicher, dass dieses Wörterbuch kein einschließendes '[]' hat? – karthikr

Antwort

17

Sie über die Werte in der Liste von data['execution'], nicht Indizes referenziert werden Looping.

Gerade diese Werte verwenden (Wörterbücher) direkt:

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

Sie wahrscheinlich, dass eine aussagekräftigere Schleife Namen geben möchten:

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

Tolle Erklärung, danke! :) – ocean800

Verwandte Themen