Json验证不工作

本文关键字:工作 验证 Json | 更新日期: 2023-09-27 17:52:11

我试图通过模式验证验证我的json,但我认为有一些问题:

string schemaJson = @"
{
    'description': 'A payload',
    'type': 'object',
    'properties': {
        'totalRecords': {'type':'number'},
        'payload': {
            'type': 'object',
            'properties': {'name':{'type':'string'}}
        }
    },
    'additionalProperties': false
}";
JsonSchema schema = JsonSchema.Parse(schemaJson);
JObject payl = JObject.Parse(@"
{
    'totalRecords': 75,
    'payload':{'namdse':'ksjfkjsdkfjkd'}
}");
IList<string> messages;
bool valid = payl.IsValid(schema, out messages);
Console.WriteLine(valid);
foreach (string message in messages)
{
    Console.WriteLine(message);
}

控制台返回true,但它应该返回false,因为我使用了错误的属性名称namdse而不是name

Json验证不工作

尝试在payload属性中设置additionalPropertiesfalse

...
'payload': {
  'type': 'object',
  'properties': {
    'name':{'type':'string'}        
  },
  'additionalProperties': false
}
...
你的json是有效的,因为namdse被认为是额外的属性。如果name是必填字段,您可能还需要添加required关键字。
...
'payload': {
  'type': 'object',
  'properties': {
    'name':{'type':'string', 'required': true}        
  },
  'additionalProperties': false
}
...

您的对象是无效的json,使用双引号,这是有效的http://jsonlint.com/

{
"description": "A payload",
"type": "object",
"properties": {
    "totalRecords": {
        "type": 123
    },
    "payload": {
        "type": "object",
        "properties": {
            "name": {
                "type": "string"
            }
        }
    }
},
"additionalProperties": false
}