传递了随机文档的模式验证?

时间:2017-04-14 18:41:03

标签: jsonschema

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

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);
    }

1 个答案:

答案 0 :(得分:1)

您选择的架构允许添加其他属性,并且不会生成任何字段&#34; required&#34;,这是任何有效的json将传递您的架构的原因。

如果添加&#34; additionalProperties&#34;:false,这将使您的架构更加严格。

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

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

这是你的架构更加严格。

{
    "$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
}