You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中向POST请求Payload添加元素时出现字符串索引必须为整数错误的解决方法

解决"string indices must be integers"错误的步骤

核心问题

你犯了两个关键错误:

  1. 用json.dumps()把Python字典直接转成了JSON字符串,此时payload是字符串类型,只能用整数索引(比如payload[0]),不能像字典那样用键名访问(比如payload["guests"]),这就是报错的直接原因。
  2. 找错了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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 12:57:34