我的架构使用"$schema": "http://json-schema.org/draft-04/schema",
并在其definitions
中包含以下内容:
"lineitem": {
"name": "Item",
"description": "Single item found in an order.",
"type": "object",
"additionalProperties": true,
"allOf":[{ "ref": "../line-item.json" }]
}
我的问题是:我需要line-item.json
中的所有内容,除了一个必需的属性status
,这是一个对我来说无用的枚举。我需要能够覆盖status
,而无需更改引用的架构。我确实需要一个状态,我有一个定义文件,其中包含正确的信息。但是我如何把它拉进我的项目?这两个项目都需要status
,但含义不同。
我试过这两个都失败了,我觉得这一定是可能的但是我做错了:
"lineitem": {
"name": "Item",
"description": "Single item found in an order.",
"type": "object",
"additionalProperties": true,
"allOf":[{ "ref": "../line-item.json" }],
"properties": {
"status": { "$ref": "definitions.json#/definitions/status" }
}
}
"lineitem": {
"name": "Item",
"description": "Single item found in an order.",
"type": "object",
"additionalProperties": true,
"allOf":[{ "ref": "../line-item.json" }],
"definitions": {
"status": { "$ref": "definitions.json#/definitions/status" }
}
},
我完全清楚解决此问题的最佳方法是重新定义line-item.json
,以便status
不是必需的,或者对每次使用都有不同的定义, line-item
架构会选择使用。但我无权更改该架构,并且难以获得该架构的许多受影响用户的支持。
答案 0 :(得分:1)
JSON Schema中的所有约束都是附加的,这意味着您无法删除添加的内容,而是需要从头开始利用合成。我的建议是拆分line-item.json
。
line-item.json
:
{
"allOf": {
"properties": {
"status": {"enum": [1,2,3]}
},
"allOf": {
"$ref": "line-item-without-status.json"
}
}
}
包含其他状态定义的订单项:
{
"allOf": {
"properties": {
"status": {"$ref": "#/definitions/status"}
},
"allOf": {
"$ref": "line-item-without-status.json"
}
}
}
共享line-item-without-status.json
:
{
"type": "object",
"properties": {
"sharedProp": {
"type": "string"
}
}
}