.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 }