2017-06-20 130 views
0

我使用Python 3.6來解析由一堆嵌套字典組成的JSON文件。當我循環JSON時,我期望我的內部循環應該返回一個字典,但是Python告訴我這是一個字符串,我不知道爲什麼。爲什麼這會返回一個字符串而不是字典?

這裏是JSON文件我解析相關摘錄:

"SaveDataList": [ 
    { 
    "PartyData": { 
     "ResourceInventory": { 
     "resources": { 
      "Herbs": { 
      "resourceID": "Herbs", 
      "resourceType": "Herbs", 
      "amount": 19, 
      "amountReserved": 0 
      } 

有下的「資源」更多的項目,但你的想法。 這裏是我的代碼來解析JSON:

for x in SaveJSON["SaveDataList"]: 
    if "SaveGame.GlobalData" in x["$type"]: 
    for y in x["PartyData"]["ResourceInventory"]["resources"]: 
     print(y,": ",y["amount"],sep='') 

當我這樣做,這是我得到的錯誤「類型錯誤:字符串索引必須是整數」。當我做type(y)時,它返回<class 'str'>。當我做type(x)它返回<class 'dict'>。我不明白爲什麼。在我看來,應該返回「Herbs」字典對象。

所以真的我的問題是,我怎樣才能得到「資源」下的每個字典對象?謝謝。

+0

是什麼Ÿ本身打印爲? –

+0

'print(y)'顯示草藥 – Cryptomancer

+0

我很難過!你可以打印'x [「PartyData」] [「ResourceInventory」]。另外我不熟悉這個SaveJSON函數。 –

回答

0

我想你必須用「{}」初始化字典,而你實際上沒有將y定義爲字典。對於python來說,循環中的「y」僅僅是之後定義的東西中的一個元素。

在開始創建一個空的字典,然後用新的數據更新它。

y = {} 

for x in SaveJSON["SaveDataList"]: 
    if "SaveGame.GlobalData" in x["$type"]: 
    for i in x["PartyData"]["ResourceInventory"]["resources"]: 
     print(y.update(i)) 

我想這應該解決的問題,現在輸入(Y)將返回「字典」型

+0

但是使用字符串索引工作一路到資源,爲什麼?這看起來好像是一個賣出的解決方法,但它不能幫助我們理解爲什麼會發生這種情況。 –

+0

這給了我'ValueError:字典更新序列元素#0具有長度1; 2是必需的。可能是因爲我是一個字符串而不是元組,所以它不能更新字典。 – Cryptomancer

相關問題