有没有一种方法可以针对该结构的JSON模式验证JSON结构?我已经查看并发现JSON.Net验证了,但这并不能满足我的要求。
JSON.net可以:
JsonSchema schema = JsonSchema.Parse(@"{ 'type': 'object', 'properties': { 'name': {'type':'string'}, 'hobbies': {'type': 'array'} } }"); JObject person = JObject.Parse(@"{ 'name': 'James', 'hobbies': ['.NET', 'LOLCATS'] }"); bool valid = person.IsValid(schema); // true
这证明是正确的。
JsonSchema schema = JsonSchema.Parse(@"{ 'type': 'object', 'properties': { 'name': {'type':'string'}, 'hobbies': {'type': 'array'} } }"); JObject person = JObject.Parse(@"{ 'surname': 2, 'hobbies': ['.NET', 'LOLCATS'] }"); bool valid = person.IsValid(schema);
这也证明是真的
JsonSchema schema = JsonSchema.Parse(@"{ 'type': 'object', 'properties': { 'name': {'type':'string'}, 'hobbies': {'type': 'array'} } }"); JObject person = JObject.Parse(@"{ 'name': 2, 'hobbies': ['.NET', 'LOLCATS'] }"); bool valid = person.IsValid(schema);
仅此验证为假。
理想情况下,我希望它可以验证那里也没有name应该存在的字段surname。
name
surname
我认为您只需要添加
'additionalProperties': false
到您的架构。这将停止提供未知属性。
因此,现在您的结果将是:-正确,错误,错误
测试代码…
void Main() { var schema = JsonSchema.Parse( @"{ 'type': 'object', 'properties': { 'name': {'type':'string'}, 'hobbies': {'type': 'array'} }, 'additionalProperties': false }"); IsValid(JObject.Parse( @"{ 'name': 'James', 'hobbies': ['.NET', 'LOLCATS'] }"), schema).Dump(); IsValid(JObject.Parse( @"{ 'surname': 2, 'hobbies': ['.NET', 'LOLCATS'] }"), schema).Dump(); IsValid(JObject.Parse( @"{ 'name': 2, 'hobbies': ['.NET', 'LOLCATS'] }"), schema).Dump(); } public bool IsValid(JObject obj, JsonSchema schema) { return obj.IsValid(schema); }
输出:-
True False False
您还可以在必须提供的字段中添加“ required”:true,这样您就可以返回消息,其中包含缺少/无效的字段的详细信息:
Property 'surname' has not been defined and the schema does not allow additional properties. Line 2, position 19. Required properties are missing from object: name. Invalid type. Expected String but got Integer. Line 2, position 18.