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

Swagger UI中JSON解码失败求助:API测试无法解析JSON参数

Swagger测试API时JSON解析失败

我正在开发一个小型API,用Swagger UI测试时需要传入JSON参数。以下是我的函数代码:

@APP.post('/get_query_by_id')
def create_new_query():
    """Make queries to database
    ---
    post:
      summary: Creates a new query
      tags: ["Queries"]
      consumes:
        - application/json
      parameters:
        - in: body
          name: query
          description: New cypher query and description to create
          schema:
            type: object
            required:
              - userName
            properties:
              query:
                type: string
              description:
                type: string
      responses:
        201:
          description: OK
    """
    json_file = request.get_json(force=True)

执行到json_file = request.get_json(force=True)时触发错误:Failed to decode JSON object: Expecting value: line 1 column 1 (char 0)。我的Swagger文档界面如下:

Swagger文档界面


问题原因及解决办法

  1. 请求参数定义不一致
    Swagger schema中标记了userName为必填项,但既没在properties里定义该字段,也没在Swagger界面中显示,导致请求体缺少必填字段或格式不合法,触发JSON解析失败。另外接口路径/get_query_by_id与创建查询的功能语义不符,建议调整为/create_query。

  2. 具体修复步骤

    • 修正Swagger schema:若确实需要userName,需在properties中补充其定义;若不需要,直接从required列表移除该字段。
    • 在Swagger UI中填写合法的JSON请求体,示例如下:
      {
        "userName": "test_user",
        "query": "MATCH (n) RETURN n",
        "description": "测试查询"
      }
      
    • 确认Flask应用已导入request对象:代码开头需添加from flask import request,避免因找不到request引发隐性错误。
    • 移除force=True参数:该参数会强制解析非JSON格式请求,容易导致解析失败,改用request.get_json()让Flask仅处理标准JSON请求。
  3. 修正后的示例代码

    from flask import Flask, request
    
    APP = Flask(__name__)
    
    @APP.post('/create_query')
    def create_new_query():
        """Make queries to database
        ---
        post:
          summary: Creates a new query
          tags: ["Queries"]
          consumes:
            - application/json
          parameters:
            - in: body
              name: query
              description: New cypher query and description to create
              schema:
                type: object
                required:
                  - userName
                  - query
                properties:
                  userName:
                    type: string
                  query:
                    type: string
                  description:
                    type: string
          responses:
            201:
              description: OK
        """
        json_file = request.get_json()
        if not json_file:
            return {"error": "无效的JSON请求"}, 400
        # 后续业务逻辑处理
        return {"message": "查询创建成功"}, 201
    

内容的提问来源于stack exchange,提问作者Ivan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 18:22:49