TypeError“布尔”对象不可下标

时间:2019-09-17 11:02:03

标签: python json parsing

我的代码正从api这样提取JSON数据,但是我无法从JSON对象读取代码。

url = 'https://api.test.net/Vacancy'
payload = {
    "APIKey": "0000",
    "Action": "GetAllVacancies",
    "Content-Type" : "json",
}

headers = {}
r = requests.post(url, data=json.dumps(payload), headers=headers)
print(r.content)

cursor = mydb.cursor()

json_obj = r.json()
for index in json_obj:
            cursor.execute("INSERT INTO apidata (VacancyName, Department, Location) VALUES (%s, %s, %s)", (json_obj[index]["VacancyName"], (json_obj[index]["Department"], (json_obj[index]["Location"]))

cursor.close()

我的JSON响应如下

{ 
   "isError":false,
   "Status":0,
   "Message":"",
   "Result":[ 
      { 
         "VacancyName":"Test Vacancy",
         "VacancyDescription":"test data 123",
         "Location":"location 1",
         "Department":"Finance",

但是我仍然遇到错误

  

TypeError'bool'对象不可下标

我正在尝试提取此JSON数据并将其发送到数据库,谢谢!

2 个答案:

答案 0 :(得分:1)

您的JSON对象是dict。遍历字典将遍历键。

对象中的第一个键是"isError",因此当您尝试访问与json_obj[index]["Department"]等效的(json_obj["isError"]["Department"]时,False["Department"]给出了您所看到的错误。

以后请提供完整的错误消息,包括回溯。如果这样做的话,回答这些问题会容易得多。

答案 1 :(得分:1)

看看

for index in json_obj:
    cursor.execute("INSERT INTO apidata (VacancyName, Department, Location) VALUES (%s, %s, %s)", (json_obj[index]["VacancyName"], (json_obj[index]["Department"], (json_obj[index]["Location"]))

您在json_obj中的键上循环,第一个键为isError。因此json_obj[index]False,因此不是下标,尝试访问键[“ VacancyName”]时会出错。

您需要遍历json_obj["Result"]中的元素

for result in json_obj["Result"]:
    cursor.execute("INSERT INTO apidata (VacancyName, Department, Location) VALUES (%s, %s, %s)", (result["VacancyName"], result["Department"], result["Location"]))