不清楚propertyNames的含义
Unclear about the meaning of propertyNames
这是一个使用 属性 名称的 JSON 架构:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"propertyNames": {"enum": ["num", "name"]}
}
我"think"那个模式的意思是这样的:一个符合JSON的实例必须是一个对象并且这个对象必须包含一个"num"属性 和 "name" 属性;这两个属性的值未指定。是否正确,是架构的意思吗?
我创建了这个实例:
{
"num": 10
}
我根据模式验证了该实例,验证器说它是有效的。嗯,为什么?架构是否指定对象必须同时包含 "num" 和 "name"?
我不熟悉 json-schema 采用的模式方法,并且发现示例是定义还是实现非常混乱。但是,我的解释是 属性 名称是由枚举定义的,它可以是数字列表
"propertyNames": {"enum": [1,2,3,4]}
或姓名列表
"propertyNames": {"enum": ["Ellen","Sue","James","Tim"]}
外部投注(我怀疑)应该是:
"propertyNames": {"enum": [1, "Ellen", 2, "Sue", 3, "James", 4, "Tim"]}
我认为您的示例有效的唯一情况是 "enum"
一词是否打算用枚举类型替换,并且枚举只能具有您需要的一个值' t 使用一个数组,但同样有效的应该是:
{"num": [8,9,10]}
和
{"name": ["Ellen","Sue","James","Tim"]}
如果这不是您所希望的明确答案,我们深表歉意,但我希望它可能有助于触发解决方案。
试试这个:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"required": ["num", "name"]
}
您还可以像这样指定属性的类型:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"required": ["num", "name"]
"properties": {
"num": {"type": "number"},
"name": {"type": "string"}
}
}
更多信息,您可以访问这个link:https://json-schema.org/understanding-json-schema/reference/object.html
propertyNames
是一种架构,对象的所有属性都必须对其有效。让我们看一个不那么令人困惑的例子。
{
"type": "object",
"propertyNames": { "maxLength": 3, "minLength": 3 },
"patternProperties": {
"": { "type": "number" }
}
}
这描述了一个对象,其中所有属性名称的长度必须为 3,并且所有 属性 值必须是数字。这是一个例子。
{
"usd": 1,
"eur": 0.86815,
"gbp": 0.76504,
"cad": "1.31004", <= Invalid property value
"xx": 1.11 <= Invalid property name
}
回到您的示例,有一个 属性、"num"
,它对 propertyNames
架构 { "enum": ["num", "name"] }
有效。因此,您示例中的值是有效的。
这是一个使用 属性 名称的 JSON 架构:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"propertyNames": {"enum": ["num", "name"]}
}
我"think"那个模式的意思是这样的:一个符合JSON的实例必须是一个对象并且这个对象必须包含一个"num"属性 和 "name" 属性;这两个属性的值未指定。是否正确,是架构的意思吗?
我创建了这个实例:
{
"num": 10
}
我根据模式验证了该实例,验证器说它是有效的。嗯,为什么?架构是否指定对象必须同时包含 "num" 和 "name"?
我不熟悉 json-schema 采用的模式方法,并且发现示例是定义还是实现非常混乱。但是,我的解释是 属性 名称是由枚举定义的,它可以是数字列表
"propertyNames": {"enum": [1,2,3,4]}
或姓名列表
"propertyNames": {"enum": ["Ellen","Sue","James","Tim"]}
外部投注(我怀疑)应该是:
"propertyNames": {"enum": [1, "Ellen", 2, "Sue", 3, "James", 4, "Tim"]}
我认为您的示例有效的唯一情况是 "enum"
一词是否打算用枚举类型替换,并且枚举只能具有您需要的一个值' t 使用一个数组,但同样有效的应该是:
{"num": [8,9,10]}
和
{"name": ["Ellen","Sue","James","Tim"]}
如果这不是您所希望的明确答案,我们深表歉意,但我希望它可能有助于触发解决方案。
试试这个:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"required": ["num", "name"]
}
您还可以像这样指定属性的类型:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"required": ["num", "name"]
"properties": {
"num": {"type": "number"},
"name": {"type": "string"}
}
}
更多信息,您可以访问这个link:https://json-schema.org/understanding-json-schema/reference/object.html
propertyNames
是一种架构,对象的所有属性都必须对其有效。让我们看一个不那么令人困惑的例子。
{
"type": "object",
"propertyNames": { "maxLength": 3, "minLength": 3 },
"patternProperties": {
"": { "type": "number" }
}
}
这描述了一个对象,其中所有属性名称的长度必须为 3,并且所有 属性 值必须是数字。这是一个例子。
{
"usd": 1,
"eur": 0.86815,
"gbp": 0.76504,
"cad": "1.31004", <= Invalid property value
"xx": 1.11 <= Invalid property name
}
回到您的示例,有一个 属性、"num"
,它对 propertyNames
架构 { "enum": ["num", "name"] }
有效。因此,您示例中的值是有效的。