2015-10-23 41 views
-1

我試圖訪問Python中的JSON對象/字典然而得到的錯誤:串指數必須是整數

TypeError: string indices must be integers if script['title'] == "IT":

,這是我的代碼,試圖訪問該字典中特別關鍵:

def CreateScript(scriptsToGenerate): 
    start = time.clock() 
    apiLocation = "" 
    saveFile = "" 
    for script in scriptsToGenerate: 
     print script 
     if script['title'] == "IT": 
      time = script['timeInterval'] 
      baseItem = "" 

和scriptsToGenerate在使用此這使得HTTP請求我的API傳遞

def GetScripts(urlParameters): 
    result = requests.get(constURLString + "/" + str(urlParameters)).json() 
    return [x for x in result if x != []] 

這裏是我打電話CreateScript

def RunInThread(ID): 
    startedProcesses = list() 
    Scripts = [] 
    Scripts = GetScripts(ID) 

    scriptList = ThreadChunk(Scripts, 2) 

    for item in scriptList: 
     proc = Process(target=CreateScript, args=(item)) 
     startedProcesses.append(proc) 
     proc.start() 

    #we must wait for the processes to finish before continuing 
    for process in startedProcesses: 
     process.join() 
     print "finished" 

,我通過這個進CreateScript

這裏是我的腳本對象的輸出

{u'timeInterval': u'1800', u'title': u'IT', u'attribute' : 'hello'} 
+1

請顯示您用來調用'CreateScript'的* exact *代碼。 – poke

+4

'腳本'不是你想象的那樣。口譯員不會說謊。 – TigerhawkT3

+0

在調用'Process(target = CreateScript,args =(item))'之前打印您的項目並查看要調用的內容 – The6thSense

回答

1

事實:

  • scriptList是字典列表(根據你的)
  • for item in scriptList:得到一個字典在一個時間
  • proc = Process(target=CreateScript, args=(item))傳遞一個字典到CreateScript功能
  • def CreateScript(scriptsToGenerate):接收字典
  • for script in scriptsToGenerate:迭代的鍵字典的
  • if script['title'] == "IT":嘗試訪問字典鍵(字符串)的title索引。

所以不行,這是行不通的。在某個時候,你迭代一個列表。您可能想要將腳本列表傳遞給CreateScript函數,因此您不應該遍歷scriptList

0

約翰,我的意思是你有一個json對象,它需要被視爲這樣。我認爲你的意思是你可以做以下事情嗎?

def CreateScript(scriptsToGenerate): 
    #start = time.clock() 
    apiLocation = "" 
    saveFile = "" 
    i = json.loads(scriptsToGenerate) 
    if i['title'] == "IT": 
     time = i['timeInterval'] 
     baseItem = "" 

     print i['title'], i['timeInterval'] 

p = json.dumps({u'timeInterval': u'1800', u'title': u'IT', u'attribute' : 'hello'}) 

CreateScript(p) 
+0

JSON作爲請求庫的GetScripts函數的一部分加載。 – poke

+0

@poke權利,我不使用請求庫,這非常方便,將來可能會使用它。 – ajsp

相關問題