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

如何用Python在JSON Schema中验证特定字段的指定值

接口字段验证实现方案

一、验证title字段必须为固定值"delectus aut autem"

可以通过JSON Schema的const关键字约束字段的固定取值,同时在接口返回结果的断言中直接验证:

修改后的test_body函数(Schema验证)

from jsonschema import validate

def test_body():
    schema = {
        "type": "object",
        "properties": {
            "id": {"type": "integer"},
            "title": {"type": "string", "const": "delectus aut autem"},  # 新增固定值约束
        },
        "required": ["id", "title"]  # 可选:强制要求字段必须存在
    }

    # 符合约束的实例验证(无报错)
    validate(instance={"id": 1, "title": "delectus aut autem"}, schema=schema)
    
    # 不符合约束的实例会抛出ValidationError(用于负面测试)
    # validate(instance={"id": 1, "title": "wrong title"}, schema=schema)

在test_get中验证接口返回的title

直接对接口返回的JSON数据做断言,或用Schema做整体验证:

import requests
from jsonschema import validate

ENDPOINT = "你的接口地址"

def test_get():
    response = requests.get(ENDPOINT)
    assert response.status_code == 200
    data = response.json()
    
    # 方式1:直接断言title值
    assert data['title'] == "delectus aut autem"
    
    # 方式2:用Schema做整体验证(推荐,可同时校验多个字段规则)
    schema = {
        "type": "object",
        "properties": {
            "id": {"type": "integer"},
            "title": {"type": "string", "const": "delectus aut autem"},
        },
        "required": ["id", "title"]
    }
    validate(instance=data, schema=schema)

二、验证gender字段只能取"male"或"female"

使用JSON Schema的enum关键字限定字段的可选取值范围:

包含gender约束的Schema示例

from jsonschema import validate

def test_gender_constraint():
    schema = {
        "type": "object",
        "properties": {
            "id": {"type": "integer"},
            "title": {"type": "string", "const": "delectus aut autem"},
            "gender": {"type": "string", "enum": ["male", "female"]}  # 新增枚举值约束
        },
        "required": ["id", "title", "gender"]  # 强制要求gender字段存在
    }

    # 合法值验证(无报错)
    validate(instance={"id": 1, "title": "delectus aut autem", "gender": "male"}, schema=schema)
    validate(instance={"id": 2, "title": "delectus aut autem", "gender": "female"}, schema=schema)
    
    # 非法值会抛出ValidationError(用于负面测试)
    # validate(instance={"id": 3, "title": "delectus aut autem", "gender": "other"}, schema=schema)

在接口返回验证中加入gender校验

修改test_get函数,加入gender字段的取值校验:

def test_get():
    response = requests.get(ENDPOINT)
    assert response.status_code == 200
    data = response.json()
    
    # 方式1:直接断言gender取值范围
    assert data['gender'] in ["male", "female"]
    
    # 方式2:用Schema做整体验证
    schema = {
        "type": "object",
        "properties": {
            "id": {"type": "integer"},
            "title": {"type": "string", "const": "delectus aut autem"},
            "gender": {"type": "string", "enum": ["male", "female"]}
        },
        "required": ["id", "title", "gender"]
    }
    validate(instance=data, schema=schema)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 10:20:43