您好,我试图了解如何使用 json 模式来验证每个软件层(数据库、模型和演示)的数据。
我已经基本了解了如何转换jsonschema定义中的记录;例如考虑:
{
"$schema": "https://json-schema.org/draft/2020-12/schema"
, "id":"myId"
, "type":"object"
, "properties":{
"code":{"type":"string","pattern":"[a-zA-Z0-9]{6}-[0-9]{4}"}
, "firstAmount":{"$ref": "#/$defs/amount"}
, "secondAmount":{"$ref": "#/$defs/amount"}
, "inputDate":{"$ref": "#/$defs/dateTime"}
}
, "required":["code","inputDate"]
,"dependentRequired":{"firstAmount":["secondAmount"]}
,"additionalProperties":false
,"$defs":{
"amount":{"type":"integer", "minimum":1, "maximum":9999999}
, "dateTime":{"type":"string", "format":"date"}
}
此模式评估:
{
"code": "a89dff-5467"
, "firstAmount": 98520
, "secondAmount": 45678
, "inputDate": "2025-05-15"
}
我正在寻找一种方法(可能是正确的方法):
如果我对前 4 点的理解正确的话,我所说的是添加自定义词汇表,但是如何添加呢?
对于最后一点,没有解决方案,因为我必须扩展我使用的验证器(doh!),这是正确的吗?
有什么建议吗?
我一次拿一个。
添加一个约束,即:secondAmount 必须小于firstAmount
JSON 架构不支持开箱即用。 无法根据另一个位置的值来定义一个位置的值。
也就是说,有一个扩展词汇表可以支持这一点,但据我所知,我的 .Net 实现是唯一的。
为约束添加自定义错误消息
自定义错误消息将基于您正在使用的实现(如果支持的话)。 没有办法在架构本身内定义错误消息。
为架构定义中的每个字段添加标签(以便 FE 可以显示此文本
JSON 模式(当前状态)将忽略未知关键字,许多实现会将它们作为注释返回。
JSON 模式的下一个版本将要求这些注释性关键字以
x-
开头(如果它们未在词汇表中定义),因此现在最好在您的自定义关键字前面添加前缀,以便它今后将兼容。
一般来说,添加模型层和表现层的指令
这也属于自定义注释关键字的类别,您可以根据需要将其添加到架构中。
还验证海关限制
这将取决于您使用的实现以及它们对自定义断言关键字的支持程度。 一些实现支持仅定义关键字并注册它,而其他实现则要求将关键字包含在词汇表中。
有关词汇表的更多信息,请查看我的文档,其中提供了概述,然后再深入了解我的实现是如何实现的。
查看以下 GitHub 项目,它们尝试使用不同的方法解决自定义约束和依赖字段: