随机文档的架构验证通过了吗?

Schema validation passed for a random document?

我是 JSON 架构和 Json.NET 架构的新手。只是按照示例编写了一个执行模式验证的测试程序。我选择了一个随机模式和一个随机 JSON 文件,但最后的 IsValid() 调用 returns 为真。我错过了什么吗?谢谢。

static void SchemaTest3()
    {
        string schemaJson = @"{
           'description': 'A person',
           'type': 'object',
           'properties': {
             'name': {'type':'string'},
             'hobbies': {
               'type': 'array',
               'items': {'type':'string'}
             }
          }
        }";
        JSchema schema = JSchema.Parse(schemaJson);

        IList<string> errorMessages;
        JToken jToken = JToken.Parse(@"{
                           '@Id': 1,
                           'Email': 'james@example.com',
                           'Active': true,
                           'CreatedDate': '2013-01-20T00:00:00Z',
                           'Roles': [
                             'User',
                             'Admin'
                           ],
                          'Team': {
                            '@Id': 2,
                            'Name': 'Software Developers',
                            'Description': 'Creators of fine software products and services.'
                          }
                        }");
        bool isValid = jToken.IsValid(schema, out errorMessages);
        Console.Write(isValid);
    }

您选择的模式允许添加额外的属性,并且不创建任何字段 "required",任何有效的 json 将通过您的模式的原因。

如果您添加 "additionalProperties":false 这将使您的架构更加严格。

您可以使用 http://www.jsonschemavalidator.net/ 来尝试您的架构并探索其他选项。

我发现 http://json-schema.org/examples.html 从 json 架构开始时非常有用。

这是您的更严格的架构。

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "description": "A person",
    "type": "object",
    "properties": {
        "name": {
            "type": "string"
        },
        "hobbies": {
            "type": "array",
            "items": {
                "type": "string"
            }
        }
    },
    "additionalProperties": false
}