.NET校验Json格式(JsonSchema)

介绍

JSON Schema是一个用于验证JSON数据的强大工具,可校验json格式和数据值

入门案例

安装Nuget

Install-package Newtonsoft.Json.Schema

代码:

 {
    string json = @"{
                        'name':'fan',
                        'age':'18',
                        'isGreat':true,
                        'pets':['ahuang','nainiu'],
                        'gender':'man',
                        'description':null
                    }";
    string schemaJson = @"{
                            ""type"":""object"",
                            ""properties"":{
                                ""name"":{
                                    ""type"":""string"",
                                    ""maxLength"":15
                                },
                                ""age"":{
                                    ""type"":[""number"",""string""]
                                },
                                ""isGreat"":{
                                    ""type"":""boolean""
                                },
                                ""pets"":{
                                    ""type"":""array"",
                                    ""items"":{""type"":""string""}
                                },
                                ""gender"":{
                                    ""type"":""string"",
                                    ""enum"":[
                                        ""man"",
                                        ""women""
                                    ]
                                },
                                ""description"":{
                                    ""type"":""null""
                                }
                            },
                            ""required"":[""name""]
                        }";
    var person = JObject.Parse(json);
    var schema = JSchema.Parse(schemaJson);
    bool valid = person.IsValid(schema, out IList<string> errorMessages);//true
}

创建JSchema

//1
var schema = JSchema.Parse(schemaJson);
//2
schema = JSchema.Load(new JsonTextReader(new StringReader(schemaJson)));
//3、代码创建JSchema
JSchema schema = new JSchemaGenerator().Generate(typeof(Account));
string schemaJson = schema.ToString();

生成的schema json:

{
  "type": "object",
  "properties": {
    "ID": {
      "type": "integer"
    },
    "Name": {
      "type": [
        "string",
        "null"
      ]
    },
    "Money": {
      "type": "number"
    }
  },
  "required": [
    "ID",
    "Name",
    "Money"
  ]
}

通用关键字

type

type关键字是json模式的基础, 指定架构的数据类型。
JSON Schema的核心定义了以下基本类型:

  • string
  • number
  • object
  • array
  • boolean
  • null

type关键字可以是一个字符串或数组,数组代表可以是多种类型中的一种

{“type”: “number”}
{“type”: [“number”, ‘string’]}

enum

enum关键字用于限制值, 它必须是一个必须包含一个元素的数组,其中每个元素都是唯一的。

$schema

该$schema关键字用于声明JSON片段实际上是JSON模式的一部分。它还声明了针对该模式编写的JSON Schema标准的哪个版本。

pattern

正则表达式

{
  “type” : “string” ,
  “pattern” : “^(\\([0-9] {3} \\))?[0-9]{3}-[0-9] {4} $ “
}

object关键字

代表一个对象

properties属性

使用properties关键字定义对象上的属性

required属性

required关键字接受一个或多个字符串的数组。每个字符串必须是唯一的。

minProperties、minProperties属性

限制属性数

array关键字

代表一个数组

items

数组元素显示

#字符串数组
{ "type": "array", "items": { "type": "string" } }

minItems、minItems

数组长度限制

#最多5个元素
{ "type": "array", "maxItems": 5, "items": { "type": "string" } }

uniqueItems

数组中的元素必须唯一

{ "type": "array", "maxItems": 5, "items": { "type": "string" }, "uniqueItems": true }

参考:
https://www.cnblogs.com/dreamyu/p/9317721.html

posted @ 2022-07-16 08:39  .Neterr  阅读(797)  评论(0编辑  收藏  举报