如何在json模式中表示sum/union类型

Q t*_*pus 14 json jsonschema

我试图使用json-schema记录JSON的现有用法.系统允许其中一个对象属性具有以下两种可能性.

{
    "tracking_number" : 123
}
Run Code Online (Sandbox Code Playgroud)

要么

{
    "tracking_number" : [ 123, 124, 125 ]
}
Run Code Online (Sandbox Code Playgroud)

如何使用json架构表达这一点?

Jas*_*ers 15

使用anyOf断言,属性必须符合一个或另一个模式.

{
    "type": "object",
    "properties": {
        "tracking_number": {
            "anyOf": [
                { "$ref": "#/definitions/tracking_number" },
                { "type": "array", "items": { "$ref": "#/definitions/tracking_number" }
            ]
    },
    "definitions": {
        "tracking_number": { "type": "integer" }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 事实证明,在这种情况下,"oneOf"对我来说更好.但是你让我走上了正确的道路. (2认同)