【发布时间】:2020-06-25 06:34:12
【问题描述】:
问题:
要求仅允许对象中的那些属性名称是架构中另一个属性的数组值的一部分(另一个属性的值依赖的属性名称)。
详细说明:
我有以下 JSON:
{
"validResources":["ip","domain","url"],
"resources":
{
"ip" : "192.168.1.1",
"domain" : "www.example.com",
}
}
我想编写一个 JSON 模式,它只允许 "resources" 中属于 "validResources" 的数组列表值的那些键。
上面的 JSON 是一个有效的 JSON,因为 "ip" 和 "domain" 键实际上是数组项的一部分,它是属性 "validResources" 的值。
但是,下面的 JSON 应该返回错误,因为“文件”不是有效资源,因为它不是 "validResorces" 数组的一部分。
{
"validResources":["ip","domain","url"],
"resources":
{
"ip" : "192.168.1.1",
"file" : "file://etc/passwd" <= No such resource in "validResources"
}
}
我尝试了什么?
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type" : "object",
"properties" : {
"validResources" : { "type" : "array",
"minItems" : 1,
"uniqueItems" : true
},
"resources":{
"type":"object",
===Unable to proceed beyond this ===
}
},
}
其他搜索:
我检查了propertyNames,但是,它只能从另一个模式派生,或者将正则表达式模式定义为其模式的一部分。但在这种情况下,“资源”中的 propertyNames / 键取决于事先未知的 "validResources" 属性的值,并且“资源”应该只允许那些字符串/名称作为其属性,这些属性是值的一部分在"validResources"的数组列表中。
有一个悬而未决的问题有点类似于这个问题here。
【问题讨论】:
-
如果您需要的值是事先知道的,那么可以。如果您希望它基于数据是动态的(可以是任何值),那么不。看起来你事先知道所有的价值观?
-
@Relequestual 这些值是未知的。因此提出了这个问题。
-
在这种情况下,对不起,不,你不能这样做。
-
@Relequestual 好像我不能按日期执行此操作。我发布解释并将其标记为答案,只是为了他人的利益。感谢您的回答。
标签: json schema jsonschema