2014-10-08 22 views
8

Cái nhìn tệp json của tôi thích cái này và tôi đang cố truy cập phần tử syslog trong vòng lặp for.LoạiError: chỉ mục danh sách phải là số nguyên, không phải là số nguyên

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

tôi làm điều đó như thế này:

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

Nhưng tôi nhận được lỗi nói rằng "Lỗi Loại: chỉ số danh sách phải là số nguyên, không dict". Tôi mới dùng python (và json). Ai có thể gợi ý tôi đi sai đâu?

+0

Rõ ràng 'i' là một 'dict', vì vậy bạn không thể sử dụng nó để lập chỉ mục thành 'dữ liệu ['thực thi']'. Không phải đó chỉ là 'cho tôi trong dữ liệu ['thi hành']: cmd = i ['test_case'] ['scriptname']'? – jonrsharpe

+1

có vẻ như 'dữ liệu' là một danh sách chứ không phải từ điển. Bạn có chắc từ điển này không có một '[]' kèm theo không? – karthikr

Trả lời

17

Bạn đang lặp qua giá trị trong danh sách tham chiếu bởi data['execution'], không chỉ số.

Chỉ cần sử dụng những giá trị (từ điển) trực tiếp:

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

Bạn có thể muốn cung cấp cho rằng một tên loop có ý nghĩa hơn:

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

Giải thích tuyệt vời, cảm ơn! :) – ocean800

Các vấn đề liên quan