JSON / MySQL:列表索引必须是整数或切片,而不是 str

Posted

技术标签:

【中文标题】JSON / MySQL:列表索引必须是整数或切片,而不是 str【英文标题】:JSON / MySQL : list indices must be integers or slices, not str 【发布时间】:2019-01-09 22:52:54 【问题描述】:

我正在尝试将 JSON 值插入到 mysql 表中

我有我的 JSON 文件:

["order":"id":"B4589B26","status_order_id":5,"status_order_name":"Sent","customer_id":326
"order_products":["order_product "id":96218,"order_id":96538,"product_id":59320,],"customer_email":"user@gmail.com","customer_company":"SARL","customer_name":"user user", .....

这是我的 Python 代码:

token = "xxxx"

r = requests.get('url', auth=('user@gmail.com', token))

mydb = pymysql.connect(host='localhost',
user='root',
passwd='user',
db='ytm_db')

cursor = mydb.cursor()

json_obj = r.json()

for ord in json_obj["order"]:
   print("id:", ord["id"])
   print("status_id:", ord["status_order_id"])
   print('---')
   cursor.execute("INSERT INTO table_test (id, status_order_id, customer_id) VALUES (%s,%s,%s)", (ord["id"], ord["status_order_id"], ord["customer_id"]))

#close the connection to the database.
mydb.commit()
cursor.close()
print ("Done")

但我收到此错误:

for ord in json_obj["order"]: TypeError: list indices must be integers 或切片,而不是 str

【问题讨论】:

【参考方案1】:

您的 JSON 对象是一个订单列表,因此您不能通过访问其 "order" 键将其视为字典。

相反,您应该遍历订单列表,然后将订单作为字典访问:

for ord in json_obj:
   print("id:", ord["order"]["id"])
   print("status_id:", ord["order"]["status_order_id"])
   print('---')
   cursor.execute("INSERT INTO table_test (id, status_order_id, customer_id) VALUES (%s,%s,%s)", (ord["order"]["id"], ord["order"]["status_order_id"], ord["order"]["customer_id"]))

【讨论】:

以上是关于JSON / MySQL:列表索引必须是整数或切片,而不是 str的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:列表索引必须是整数或切片,而不是列表

TypeError:列表索引必须是整数或切片,而不是浮点数

TypeError:列表索引必须是整数或切片,而不是 str

TypeError:列表索引必须是整数或切片,而不是尝试制作二维列表时的元组

错误列表索引必须是整数或切片,而不是str

Python:无法替换列表中的项目,原因是:TypeError:列表索引必须是整数或切片,而不是 str