在JSON中设计互斥参数组

时间:2017-06-14 08:10:28

标签: json

我在JSON中有一组两个不相关的参数分组是互斥的。关于哪个参数组应保留在JSON文件中的决定由另一个参数驱动。

我不确定这是否应该通过使用这种特殊结构来处理,或者确实如果它甚至属于最佳实践。

在第一种情况下,我们的合约类型为Fixed,其中有两个特定于fixedEndfixedEndUnit的参数。

在第二种情况下,我们有一个Variable类型的合约,该合约只有一个特定于variableEnd的参数。

合约只能是固定或可变。而且,这两种合约类型都具有共同的价值foobarbaz

我应该如何构建我的JSON

第一个案例

    "contract":[
      {
        "type":"Fixed",
        "fixedEnd":12,
        "fixedEndUnit":"Months",
        "foo":"foo",
        "bar":"bar",
        "baz":"baz"
      }]

第二种情况

    "contract":[
      {
        "type":"Variable",
        "variableEnd":"2012-03-19T07:22Z",
        "foo":"foo",
        "bar":"bar",
        "baz":"baz"
      }]

1 个答案:

答案 0 :(得分:0)

解决方案是为每种类型的合同添加oneOf,并在required中添加两组oneOf值:

"agreement": {
    "items": {
        "additionalProperties": true,
        "id": "/properties/contract/items/properties/agreement",
        "properties": {
            "type": {
                "id": "/properties/contract/items/properties/discounts/type",
                "type": "string",
                "pattern": "£(\\d+\\.)?\\d"
            },
            "fixedEnd": {
                "id": "/properties/contract/items/properties/discounts/fixedEnd",
                "type": "string",
                "pattern": "6"
            },
            "fixedValue": {
                "id": "/properties/contract/items/properties/discounts/fixedValue",
                "type": "string",
                "pattern": "kWh"
            },
            "variableEnd": {
                "id": "/properties/contract/items/properties/discounts/variableEnd",
                "type": "string",
                "pattern": "6"
            }
        },
        "oneOf": [{
                "required": ["type", "fixedend", "fixedValue"]
            },
            {
                "required": ["type", "variableEnd"]
            }
        ]
    }
}