【发布时间】:2019-02-26 19:40:44
【问题描述】:
我想为这个 JSON“伪代码”示例创建一个 JSON 模式:
{
"xyz": {
"$something": {
"property_a": "...",
"property_b": "...",
"property_c": "..."
}
}
}
$something 可以是以下字符串之一:foo、bar 或 buz。我当前的架构如下所示:
{
"xyz": {
"id": "xyz",
"type": "object",
"properties": {
"foo": {
"id": "foo",
"type": "object",
"additionalProperties": false,
"required": ["property_a"],
"properties": {
"property_a": {
"id": "property_a",
"type": "string"
},
"property_b": {
"id": "property_b",
"type": "string"
},
"property_c": {
"id": "property_a",
"type": "string"
}
}
},
"bar": {
... copy&paste foo
},
"buz": {
... copy&paste foo
}
}
}
}
它可以工作,但它有很多重复的代码。所以我正在寻找一种更优雅的方式来实现它。
如何定义允许作为 JSON Schema 中属性名称的值列表(谎言enum)?
【问题讨论】:
-
您查看过oneOf 以及参考资料吗?
-
感谢您的评论!
oneOf、anyOf等适用于“关键字的值”。我想要实现的是使 key 变量。 -
这看起来像jsonapi。有一个很好的例子说明你可能会在这里尝试做什么:github.com/eneuhauser/json-api/blob/schema/schema。我使用该架构来验证我的所有资源,并使用引用来检查响应的形状。看起来它使用模式属性来定义变量值,除了已知值之一
-
你看过
patternProperties吗?它不是枚举,但您可以在正则表达式中列出。或者你还想要什么? =] -
@Relequestual 是的,这实际上正是我想要的。谢谢!
标签: json enums jsonschema