.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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2020-07-16 ASP.NET Core-获取Server对象