KeyError:在Python中从JSON文件读取时没有提示

时间:2019-02-04 15:39:52

标签: python json

我对为什么一直得到KeyError感到很困惑:无,我想让用户输入一个Name(例如Lisbon)并在JSON文件(例如Jade,John)中返回其他用户,这些用户属于与用户输入的国家(例如,里斯本)相同,我有一个JSON文件,如下所示:

{  
   "user1":{  
      "Country":[  
         "China",
         "USA",
         "Nepal"
      ],
      "Name":[  
         "Lisbon"
      ]
   },
   "user2":{  
      "Country":[  
         "Sweden",
         "China",
         "USA"
      ],
      "Name":[  
         "Jade"
      ]
   },
   "user3":{  
      "Country":[  
         "India",
         "China",
         "USA"
      ],
      "Name":[  
         "John"
      ]
   }
}

这是我的代码

userName = raw_input("Enter user's name: ")
with open('listOfUsers.json') as f:
    data = json.load(f)

def getId(name):
  for userId, v in data.items():
    if v['Name'] == name:
        return userId;

id = getId(userName)
for k, v in data.items():
  if any(x in data[id]['Country'] for x in v['Country']):
      print(k)

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

您的getId函数始终返回None。这是因为if v['Name'] == name:将永远不会成功。 v['Name']是一个列表,name是一个字符串,并且列表和字符串永远不会比较相等。

如果可能,请修改json文件的格式,以使Name值为字符串,而不是字符串列表。

"user1":{
    "Country":[
        "China", "USA", "Nepal"
    ],
     "Name": "Lisbon"
},
//etc

如果这不可能,请修改getId,以便检查列表的第一个元素。

def getId(name):
  for userId, v in data.items():
    if v['Name'][0] == name:
        return userId