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

如何验证含本地/外部文件$ref的JSON Schema及字典校验

使用带本地/外部引用的JSON Schema校验字典

要处理包含本地定义引用和外部文件引用的JSON Schema校验,我们可以用Python的jsonschema库,通过RefResolver来解析这些引用路径。下面是具体实现步骤和代码:

前提准备

确保你已安装jsonschema库:

pip install jsonschema

假设文件结构如下:

./
├── main_schema.json  # 你的主Schema文件
├── Common.json       # 外部引用的Schema文件
└── validate.py       # 校验脚本

校验代码实现

在validate.py中写入以下代码:

import json
from jsonschema import validate, RefResolver
from pathlib import Path

def load_schema(schema_path):
    """加载本地JSON Schema文件"""
    with open(schema_path, 'r', encoding='utf-8') as f:
        return json.load(f)

# 加载主Schema和外部Schema
main_schema = load_schema('main_schema.json')
common_schema = load_schema('Common.json')

# 创建RefResolver,指定主Schema的基准URI,同时注册外部Schema的URI
base_uri = Path('main_schema.json').absolute().as_uri()
resolver = RefResolver(
    base_uri=base_uri,
    referrer=main_schema,
    store={
        # 注册外部Schema的URI到store中,让Resolver能找到它
        Path('Common.json').absolute().as_uri(): common_schema
    }
)

def validate_dict(data):
    """用Schema校验字典数据"""
    try:
        validate(instance=data, schema=main_schema, resolver=resolver)
        return True, "数据校验通过"
    except Exception as e:
        return False, str(e)

# 测试示例
if __name__ == '__main__':
    # 测试通过的案例
    valid_data = {
        "ReferenceToLocalSchema": {"no-write": True},
        "ReferenceToExternalSchema": {"src": ["file1.txt", "file2.jpg"]}
    }
    print(validate_dict(valid_data))  # 输出: (True, '数据校验通过')

    # 测试不通过的案例(缺少ExternalType的必填src字段)
    invalid_data = {
        "ReferenceToLocalSchema": {"no-write": False},
        "ReferenceToExternalSchema": {}
    }
    print(validate_dict(invalid_data))  # 输出校验错误信息

代码说明

  • load_schema函数负责读取本地JSON Schema文件并解析为字典。
  • RefResolver的作用是解析Schema中的$ref引用:
    • base_uri指定主Schema文件的绝对URI,作为解析本地引用的基准。
    • store参数注册外部Schema的URI和对应的Schema内容,让Resolver能找到外部文件中的定义。
  • validate函数结合Resolver完成数据校验,捕获异常返回校验结果。

内容的提问来源于stack exchange,提问作者Nore Hamou tahra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:20:57