跳到主要内容

通用关键字

本章列出了一些适用于所有 JSON 类型的杂项属性。

注释

JSON Schema 包含一些关键字,它们并不严格用于验证,而是用于描述模式的一部分。这些“注释”关键字都不是必需的,但鼓励使用为了良好实践,并且可以使您的模式“自我记录”。

titledescription关键字必须是字符串。title 最好是简短的,而 description 提供模式描述的数据因此会有更长的说明。

default关键字指定一个默认值。该值不用于在验证过程中填充缺失值。文档生成器或表单生成器等非验证工具可能会使用此值提示用户如何使用该值。但是,default通常用于表示如果缺少某个值,则该值在语义上与该值与默认值一起存在时的语义相同。default 的值应该根据它所在的模式进行验证,但这不是必需的。

Draft 6 中的新内容 examples关键字是提供一系列针对模式进行验证的示例的地方。这不用于验证,但可能有助于向读者解释模式的效果和目的。每个条目都应该根据它所在的模式进行验证,但这并不是严格要求的。没有必要复制examples数组中的default值,因为 default将被视为另一个示例。

Draft 7 中的新内容 布尔类型的关键字readOnlywriteOnly通常用于 API 上下文中。readOnly表示该值可读不可改,可用于说明一个更改值的 PUT 请求将得到一个400 Bad Request的响应。writeOnly表示该值可已修改但是不可以读,可用于说明可通过 PUT 请求来设置值,但通过 GET 请求来检索该记录时不能获取该值 。

Draft2019-09 的新内容 deprecated关键字是一个布尔值,表明该关键字应用的实例值不宜使用,并可能在将来被移除。

{
"title": "Match anything",
"description": "This is a schema that matches anything.",
"default": "Default value",
"examples": [
"Anything",
4035
],
"deprecated": true,
"readOnly": true,
"writeOnly": false
}

评论

Draft 7 中的新内容 $comment关键字严格用于向模式添加注释。它的值必须始终是一个字符串。与注解 titledescriptionexamples不同, JSON 模式实现不允许附加任何含义或行为,甚至可以随时剥离它们。因此,它们对于给 JSON 模式的未来编辑者留下笔记很有用,但不宜用于与模式的用户进行交流。

枚举值

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

以下是验证路灯颜色的示例:

{
"enum": ["red", "amber", "green"]
}

"red" // OK
"blue" // not OK

您甚至可以使用 enum 添加没有类型的值,让我们扩展示例,用null指示“off”,并添加 42,只是为了好玩。

{
"enum": ["red", "amber", "green", null, 42]
}

"red" // OK
null // OK
42 // OK
0 // not OK

常量值

Draft 6 中的新内容 const关键字被用于限制值为一个常量值。

例如,如果出于出口原因仅支持运送到美国:

{
"properties": {
"country": {
"const": "United States of America"
}
}
}

{ "country": "United States of America" } // OK
{ "country": "Canada" } // not OK