【发布时间】:2013-10-23 14:13:20
【问题描述】:
有没有办法针对该结构的 JSON 模式来验证 JSON 结构?我查看并发现 JSON.Net validate 但这并不能满足我的要求。
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。
【问题讨论】:
-
您想验证字符串(模式)与字符串(给定对象)还是使用对象作为模式?
-
是的,像 SCHEMA
...{'Name' : string , 'Cars': int ....}vs OBJ...{'Name' : Bob, 'Pants': 2....}是假的,但...{'Name' : Bob, ....}是真的。我会得到一个 JSON 字符串,我需要将它与数据库中的模式进行比较以确保它是有效的。 -
再次我想问得更清楚一点,是否该架构是您拥有的 C# 对象并且您想针对传入的未知字符串对其进行测试?
-
我不确定我是否理解正确,但这里是:我输入了一个未知字符串,我想将它与我拥有的模式字符串进行比较。这听起来像是你在问什么。
标签: c# json validation jsonschema