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

能否验证JSON Schema中默认值类型与属性类型匹配?

关于JSON Schema默认值与属性类型匹配的验证问题

问题1:能否验证JSON Schema中的默认值类型与属性类型是否匹配?

JSON Schema规范本身没有强制要求默认值必须匹配属性的类型,因此标准的JSON Schema验证器不会将这种情况判定为错误。但你可以通过自定义逻辑来检查这种类型不一致的问题。

问题2:给出的代码是否会抛出错误,或能否通过jsonSchemaObj的方法发现类型不一致?

代码反序列化阶段不会报错

你提供的这段C#代码在反序列化时不会抛出错误。JsonSerializer.Deserialize只是将JSON字符串解析为JsonSchema对象,它只处理JSON结构的正确性,不会验证Schema的语义规则(比如默认值与属性类型是否匹配)。

无法直接通过jsonSchemaObj的内置方法发现问题

JsonSchema对象本身没有内置方法来自动检查默认值与属性类型的一致性。你需要手动编写验证逻辑来实现这一点。

自定义检查的示例代码

针对你给出的Schema,可以编写如下逻辑来检测类型不一致:

// 遍历Schema中的所有属性
foreach (var prop in jsonSchemaObj.Properties)
{
    var propName = prop.Key;
    var propSchema = prop.Value;
    
    // 仅当属性有默认值且明确指定类型时检查
    if (propSchema.Default != null && propSchema.Type != null)
    {
        // 判断默认值的实际JSON类型
        var defaultValueType = propSchema.Default.ValueKind switch
        {
            JsonValueKind.True or JsonValueKind.False => "boolean",
            JsonValueKind.Number => "number",
            JsonValueKind.String => "string",
            JsonValueKind.Object => "object",
            JsonValueKind.Array => "array",
            _ => "unknown"
        };
        
        // 对比预期类型与实际默认值类型(此处简化处理单类型场景)
        var expectedType = propSchema.Type.ToString().ToLower();
        if (defaultValueType != expectedType)
        {
            Console.WriteLine($"属性 {propName} 的默认值类型不匹配:预期 {expectedType},实际 {defaultValueType}");
        }
    }
}

运行这段代码会输出:属性 isCommander 的默认值类型不匹配:预期 boolean,实际 string,以此发现类型不一致问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 03:54:54