gpt4 book ai didi

JSON.Net 模式验证未标记其他属性?

转载 作者:行者123 更新时间:2023-12-02 17:46:47 31 4
gpt4 key购买 nike

我正在使用 NewtonSoft.JSON 进行一些 JSON 架构验证。我看到如果 JSON 具有比架构中指定的数据更多的数据,则验证返回“ISValid=true”。代码和数据如下。该架构没有名为“city”的属性的属性定义,即将到来的 JSON 数据具有该属性和它的值。我希望下面的 IsValid 调用返回 false,但它返回 true。模式或类上是否有设置,例如“强制执行严格”或类似的设置,这些设置将强制数据具有模式中指定的所有数据且仅具有数据?

   public static void ValidateJsonSchema(string expectedSchema, string actualData)
{
JsonSchema validSchema = JsonSchema.Parse(expectedSchema);
JObject actualJson = JObject.Parse(actualData);

IList<string> messages;
if (!actualJson.IsValid(validSchema, out messages))
{
throw new Exception("Returned data JSON schema validation failed." + messages.ToXml());
}
}

最佳答案

将架构上的 additionalProperties 属性设置为 false,这样当您正在验证的数据上有其他属性时,验证将失败。

例如,如果您要验证的地址包含街道名称和号码而不是城市,那么它将如下所示:

{
"title": "Address",
"type": "object"
"additionalProperties": false,
"properties": {
"streetName": {
"type": "string"
},
"streetNum": {
"type": "integer"
}
}
}

以上内容将确保如果数据中存在任何其他属性,验证将失败。但是,如果您缺少某个属性(例如 streetName),它仍然会通过验证。为确保指定的所有属性都存在,请对每个属性使用 required,如下所示:

{
"title": "Address",
"type": "object"
"additionalProperties": false,
"properties": {
"streetName": {
"type": "string",
"required": true
},
"streetNum": {
"type": "integer",
"required": true
}
}
}

以上将确保数据包含每个属性并且只包含那些属性。

顺便说一句,我找不到任何特定于 JSON.Net 和模式验证的信息,但找到了 json 模式 site对于复杂的模式验证非常有用。

关于JSON.Net 模式验证未标记其他属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13503407/

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