为什么这会返回一个字符串而不是一个字典?

时间:2017-06-20 18:14:35

标签: python json

我正在使用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='')

我这样做的错误是“TypeError:string indices必须是整数”。当我type(y)时,它会返回<class 'str'>。当我type(x)时,它会返回<class 'dict'>。我不明白为什么。在我看来,y应该返回“Herbs”字典对象。

所以我的问题是,如何在“资源”下获取每个字典对象?谢谢。

1 个答案:

答案 0 :(得分:0)

我猜你必须通过&#34; {}&#34; 初始化字典,而你实际上并没有将y定义为字典。对于python来说,&#34; y&#34;在循环中只是之后定义的东西中的一个元素。

一开始创建一个空字典,然后用新数据更新它。

y = {}

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

我想它应该解决问题,现在类型(y)将返回&#34;字典&#34;型