gpt4 book ai didi

c# - 根据 JSON Schema C# 验证 JSON

转载 作者:可可西里 更新时间:2023-11-01 07:45:56 26 4
gpt4 key购买 nike

有没有办法根据该结构的 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

最佳答案

我认为你只需要添加

'additionalProperties': false

到你的模式。这将停止提供未知属性。

所以现在你的结果将是:- True, False, 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.

关于c# - 根据 JSON Schema C# 验证 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19544183/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com