2014-10-08 12 views
8

मेरी जेसन फ़ाइल इसे पसंद करती है और मैं लूप में syslog तत्व को एक्सेस करने का प्रयास कर रहा हूं।टाइपरर: सूची सूचकांक पूर्णांक होना चाहिए, न कि

{ 
    "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'] 

लेकिन मैं त्रुटि कह प्राप्त "लेखन त्रुटि: सूची सूचकांक पूर्णांकों होना चाहिए, dict नहीं"। मैं अजगर के लिए नया हूं (और जेसन भी)। क्या कोई सुझाव दे सकता है कि मैं गलत कहां जा रहा हूं?

+0

जाहिर 'मैं' घ एक 'dict' है, इसलिए आप इसे 'डेटा [' निष्पादन '] में अनुक्रमणित करने के लिए उपयोग नहीं कर सकते हैं। क्या यह सिर्फ डेटा ['निष्पादन'] में नहीं होना चाहिए: cmd = i ['test_case'] ['scriptname'] '? – jonrsharpe

+1

लगता है कि 'डेटा' एक सूची है, न कि एक शब्दकोश। क्या आप वाकई इस शब्दकोश में एक संलग्न '[] 'नहीं है? – karthikr

उत्तर

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

संबंधित मुद्दे