【发布时间】:2017-02-24 21:42:13
【问题描述】:
我想使用 JSON 模式来验证一些值。我有两个对象,称它们为trackedItems 和trackedItemGroups。 trackedItemGroups 是组名和 trackedItems 名称的列表。例如,架构类似于:
"TrackedItems": {
"type": "array",
"items": {
"type": "object",
"properties": {
"TrackedItemName": { "type": "string" },
"Properties": { ---- }
}
}
},
"TrackedItemGroups": {
"type": "array",
"items": {
"type": "object",
"properties": {
"GroupName": {
"type": "string"
},
"TrackedItems": {
"type": "array",
"items": {"type": "string"}
}
}
}
}
我想验证TrackedItemGroups 的TrackedItems 数组中的每个字符串都是在TrackedItems.TrackedItemName 中定义的名称。
这类似于使用enum 属性来限制值,但enum 列表是根据TrackedITems.TrackedItemName 中的值生成的。
如何编写架构以使用 JSON 自己的数据进行验证?
我知道我可以四处移动,即 TrackedItems 定义了他们所在的组,但是有数百个被跟踪的项目,这个组织更适合我的用例。
我试过了:
"TrackedItems": {
"type": "array",
"items": {
"oneOf": [
{"$ref":"#/properties/TrackedItems/items/properties/TrackedItemName"}
]
}
}
但这会导致错误:
Newtonsoft.Json.Schema.JSchemaReaderException:无法解析 架构参考 '#/properties/TrackedItems/items/properties/TrackedItemName'。
对于数据示例,如果我有 TrackedItems:
项目1,项目2,项目A,项目B,项目C
和组:
组 1: 项目1、项目B、项目C
组 2: 项目1,项目2,项目Z
Group2 会引发违规,因为它包含未在 TrackedItems 中定义的项目。
【问题讨论】:
标签: json json.net jsonschema