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

Python中如何将用户输入变量封装为JSON发送POST请求?

正确封装用户输入为JSON数据发送POST请求的方法

直接构造包含用户输入的Python字典,再通过requests库正确序列化并发送,是最安全且不易出错的方式,避免用字符串拼接(f-string/format)引发的JSON格式错误。

错误原因分析

你之前用f-string或format处理字典的方式本质是字符串拼接,如果用户输入包含引号、转义字符(比如", \),会直接破坏JSON的语法结构,导致API响应无法解析,甚至请求被拒绝。

正确实现步骤

  1. 获取用户输入并构造原生Python字典
    直接将用户输入的值赋值给字典的键,不需要任何字符串拼接操作:

    def addReq():
        subject = input("请输入工单主题: ")
        description = input("请输入工单描述: ")
        # 直接构造字典,保留变量原生类型
        return {"subject": subject, "description": description}
    
  2. 发送POST请求的两种方式

    方式一:用requests.post的json参数(推荐)

    requests库会自动将字典序列化为JSON字符串,并设置正确的Content-Type: application/json请求头,无需手动处理:

    import requests
    
    # 获取用户输入的工单数据
    ticket_data = addReq()
    # 发送POST请求
    api_url = "https://你的工单系统API地址"
    response = requests.post(api_url, json=ticket_data)
    
    # 处理响应
    try:
        result = response.json()
        print("工单添加成功,响应结果:", result)
    except ValueError:
        print("响应解析失败,返回内容:", response.text)
    

    方式二:手动序列化JSON(自定义场景)

    如果需要自定义JSON序列化参数(比如支持中文、格式化输出),可以用json.dumps手动转换,再设置请求头:

    import requests
    import json
    
    ticket_data = addReq()
    # 手动序列化,ensure_ascii=False保留中文
    json_payload = json.dumps(ticket_data, ensure_ascii=False, indent=2)
    headers = {"Content-Type": "application/json; charset=utf-8"}
    
    response = requests.post(api_url, data=json_payload, headers=headers)
    # 响应处理同上
    

关键注意点

  • 永远不要用字符串拼接的方式构造JSON,Python字典+内置的json模块才是可靠的序列化方式。
  • 检查API返回的响应状态码(比如response.status_code),如果是4xx/5xx,先查看response.text了解错误原因,再排查请求数据问题。

内容的提问来源于stack exchange,提问作者R3TURN-0

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 18:42:38