Json Schema介绍 和 .net 下的实践 - 基于Lateapexearlyspeed.Json.Schema - 基础1 - type关键字和string类型
2024/1/14 14:32:19
本文主要是介绍Json Schema介绍 和 .net 下的实践 - 基于Lateapexearlyspeed.Json.Schema - 基础1 - type关键字和string类型,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
本系列旨在介绍Json Schema的常见用法,以及.net实现库Lateapexearlyspeed.Json.Schema的使用
这篇文章将介绍Json Schema中的type关键字,和string类型的常见验证功能。用例基于.net的LateApexEarlySpeed.Json.Schema nuget package。这是新创建的一个 Json Schema在.net下的高性能实现库。
最简单的Json Schema
就像其他各种Schema一样,Json Schema的一个基本且核心的目的是对Json数据进行描述,以便进行验证。Json Schema其实是一个由各种keywords组合而成的“容器”,每个keyword有不同的作用范围和验证功能。一个最简单的Json Schema是空Json object,它代表所有的Json 数据都是有效的 (因为它没有带着任何keyword):
{}
让我们用 .net下的Lateapexearlyspeed.Json.Schema library试一下:
var jsonValidator = new JsonValidator("{}"); ValidationResult validationResult = jsonValidator.Validate("123"); Assert.True(validationResult.IsValid);
除了空Json object, 还可以用true和false分别表示“任何数据都符合”和“任何数据都不符合”:
ValidationResult result = new JsonValidator("true").Validate("123"); Assert.True(result.IsValid);
ValidationResult result = new JsonValidator("false").Validate("123"); Assert.False(result.IsValid);
type 关键字
一般来说,大家用的最多的关键字(keyword)应该是type, 它用来描述数据应该是哪种类型的。比如下面的例子,只允许json数据是string而不能是其他类型:
string schema = """ { "type": "string" } """; var jsonValidator = new JsonValidator(schema); Assert.True(jsonValidator.Validate("\"abc\"").IsValid); Assert.False(jsonValidator.Validate("123").IsValid);
type关键字支持如下内容:string,number,integer,object,array,boolean,null。
String
String type用于表示数据是json string type。
"This is string json token."
string schema = """ { "type": "string" } """; var jsonValidator = new JsonValidator(schema); Assert.True(jsonValidator.Validate("\"abc\"").IsValid); Assert.False(jsonValidator.Validate("123").IsValid);
长度
对于String json token来说,可以用minLength和maxLength关键字来表示string长度:
string schema = """ { "type": "string", "minLength": 3, "maxLength": 5 } """; var jsonValidator = new JsonValidator(schema); Assert.True(jsonValidator.Validate("\"abc\"").IsValid); ValidationResult result = jsonValidator.Validate("\"ab\""); Assert.False(result.IsValid); Assert.Equal("minLength", result.Keyword); Assert.Equal(ResultCode.StringLengthOutOfRange, result.ResultCode); Assert.Equal("String instance's length is 2 which is less than '3'", result.ErrorMessage);
正则表达式
正则表达式的关键字是pattern,它用来验证string数据是否匹配要求的pattern.
string schema = """ { "type": "string", "pattern": "^(\\([0-9]{3}\\))?[0-9]{3}-[0-9]{4}$" } """; var jsonValidator = new JsonValidator(schema); Assert.True(jsonValidator.Validate("\"(888)555-1212\"").IsValid); ValidationResult result = jsonValidator.Validate("\"(800)FLOWERS\""); Assert.False(result.IsValid); Assert.Equal("pattern", result.Keyword); Assert.Equal(ResultCode.RegexNotMatch, result.ResultCode); Assert.Equal("Regex: '^(\\([0-9]{3}\\))?[0-9]{3}-[0-9]{4}$' cannot find match in instance: '(800)FLOWERS'", result.ErrorMessage);
字符串格式
有时人们需要表示数据是一些常用的格式,比如是邮箱地址,uri, ip地址,日期时间,GUID 等。虽然可以用正则表达式pattern来手动解决,但json schema还是规定了format关键字来描述一些常用格式,以方便使用。LateApexEarlySpeed.Json.Schema默认支持如下format:
- uri
- uri-reference
- date
- time
- date-time
- uuid
- hostname
- ipv4
- ipv6
- json-pointer
- regex
它们各自的具体含义可参考官方说明。
这里仅用email format来举例子吧:
string schema = """ { "type": "string", "format": "email" } """; var jsonValidator = new JsonValidator(schema); Assert.True(jsonValidator.Validate("\"hello@world.com\"", new JsonSchemaOptions{ValidateFormat = true}).IsValid); ValidationResult result = jsonValidator.Validate("\"@world.com\"", new JsonSchemaOptions { ValidateFormat = true }); Assert.False(result.IsValid); Assert.Equal("format", result.Keyword); Assert.Equal(ResultCode.InvalidFormat, result.ResultCode); Assert.Equal("Invalid string value for format:'email'", result.ErrorMessage);
更完整的字符串相关关键字请参考官方json schema specification。
之后的文章会继续介绍Json Schema的其他功能和LateApexEarlySpeed.Json.Schema的使用。
LateApexEarlySpeed.Json.Schema是新的Json Schema的.net library, nuget package下载:https://www.nuget.org/packages/Lateapexearlyspeed.Json.Schema
github doc repo: https://github.com/lateapexearlyspeed/Lateapexearlyspeed.JsonSchema.Doc, 使用中遇到的问题,欢迎发到repo issue这里。
这篇关于Json Schema介绍 和 .net 下的实践 - 基于Lateapexearlyspeed.Json.Schema - 基础1 - type关键字和string类型的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#