Python中向POST请求Payload添加元素时出现字符串索引必须为整数错误的解决方法
解决"string indices must be integers"错误的步骤
核心问题
你犯了两个关键错误:
- 用
json.dumps()把Python字典直接转成了JSON字符串,此时payload是字符串类型,只能用整数索引(比如payload[0]),不能像字典那样用键名访问(比如payload["guests"]),这就是报错的直接原因。 - 找错了
guests列表的位置:你的guests嵌套在rooms列表的第一个房间对象里,不是顶级键。
修正后的代码
import json # 修正input语法:提示字符串加引号 adults = int(input("Enter no.of adults:")) childs = int(input("Enter no.of childs:")) # 先创建Python字典,不急于转成JSON字符串 payload_dict = { "dates": {"from": "check_in_date", "to": "check_out_date"}, "propertyId": "%hotel_code", "leadGuest": { "birthDate": "1991-09-13", "contact": { "address": "Address", "city": "City", "country": "Country", "email": "Email_Address", "phone": "MobileNo", "state": "State", "zip": "Zipcode" }, "name": {"first": "First_Name", "last": "Last_Name"}, "title": "MR" }, "reference": {"agency": "JhdGVQbGFuQ29kZSI6Ik1212"}, "paymentDetails": { "type": "credit_card", "details": { "number": "4111111111111111", "cvv": "123", "expiry": {"month": "01", "year": "2028"}, "name": {"first": "First_Name", "last": "Last_Name"} } }, "rooms": [ { "roomCode": "roomCode", "roomId": "roomId", "rateCode": "rateCode", "ratePlanId": "ratePlanId", "expectedPrice": {"amount": "amount", "currency": "USD"}, "guests": [ { "birthDate": "1992-09-13", "contact": { "address": "Address", "city": "City", "country": "Country", "email": "%Email_Address", "phone": "MobileNo", "state": "State", "zip": "Zipcode" }, "name": {"first": "First_Name", "last": "Last_Name"}, "title": "MR" } ] } ], "meta": [] } # 正确访问guests列表:rooms[0]里的guests if adults == 2: payload_dict["rooms"][0]["guests"].append({ "birthDate": "1980-09-13", "name": {"first": "Adultguest", "last": "test"}, "title": "MR" }) if childs == 1: payload_dict["rooms"][0]["guests"].append({ "birthDate": "2018-09-13", "name": {"first": "childguest", "last": "test"}, "title": "MR" }) # 所有修改完成后,再转成JSON字符串用于POST请求 payload = json.dumps(payload_dict) print(payload)
额外说明
- 永远记住:
json.dumps()是把Python对象转成JSON字符串,json.loads()是把JSON字符串转回Python对象。如果需要修改结构,一定要在Python字典/列表层面操作,最后再转成JSON。 - 你的原始代码里还有其他语法小错误:比如
print(payload["guests"])缺少右括号,已经在修正代码里一并修复。
内容的提问来源于stack exchange,提问作者Hiba
相关产品推荐
相关产品推荐

