对于以下json字符串:
{
"abc" : 123,
"def" : 345
}
Run Code Online (Sandbox Code Playgroud)
以下架构认为它有效:
{
"$schema": "http://json-schema.org/draft-03/schema#",
"title": "My Schema",
"description": "Blah",
"type": "object",
"patternProperties": {
".+": {
"type": "number"
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,将patternProperties更改为属性仍认为它有效.那么,这2个标签之间的区别是什么?
对于上面的模式,所有属性都应该是数字.此数据无效:
{ a: 'a' }
Run Code Online (Sandbox Code Playgroud)
如果使用属性替换patternProperties,则属性'.+'应为数字.所有其他属性可以是任何东西.这将是无效的:
{ '.+': 'a' }
Run Code Online (Sandbox Code Playgroud)
这是有效的:
{ a: 'a' }
Run Code Online (Sandbox Code Playgroud)
小智 2
对象的属性(键值对)是使用properties 关键字定义的。属性的值是一个对象,其中每个键都是属性的名称,每个值都是用于验证该属性的 JSON 模式。
\n\nextraProperties 可以限制对象,使其不具有未显式列出的其他属性,或者可以为对象上的任何其他属性指定架构。有时这还不够,您可能想要限制额外属性的名称,或者您可能想说,给定特定类型的名称,该值应该与特定模式匹配。\xe2\x80\x99s 就是patternProperties 出现的地方:它是一个从正则表达式映射到模式的新关键字。如果附加属性与给定的正则表达式匹配,它还必须根据相应的架构进行验证。
\n\n注意:定义正则表达式时,请务必注意该表达式可能与属性名称中的任何位置匹配。例如,正则表达式“p”将匹配任何包含 ap 的属性名称,例如“apple”,而不仅仅是名称简单为“p”的属性。因此,将正则表达式括在 ^...$ 中通常不会那么混乱,例如“^p$”。
\n\n供进一步参考 - http://spacetelescope.github.io/understanding-json-schema/reference/object.html
\n| 归档时间: |
|
| 查看次数: |
6558 次 |
| 最近记录: |