【问题标题】:Json schema - oneOf fields needs to be requiredJson 模式 - oneOf 字段需要是必需的
【发布时间】:2016-10-17 09:45:00
【问题描述】:

我需要 oneOf value 和 value_num 作为必填字段,但不能同时显示。这些选项都不适合我。我尝试添加“additionalProperties”:false。尝试删除 value 和 value_num 字段声明。

{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
    "observation": {
        "type": "array",
        "minItems": 1,
        "items": {
            "type": "object",
            "properties": {
                "timestamp": {
                    "type": "string",
                    "format": "date-time"
                },
                "eventType": {
                    "type": "string"
                },
                "value": {
                    "type": "object"
                },
                "value_num": {
                    "type": "number"
                }

            },
            "oneOf": [{
                "properties": {
                    "value": {
                        "type": "object"
                    },
                    "required": ["value"]
                }
            }, {
                "properties": {
                    "value_num": {
                        "type": "number"
                    },
                    "required": ["value_num"]
                }
            }],
            "required": [
                "timestamp",
                "eventType"
            ]
        }
    }
},
"required": [
    "observation"
]

}

我尝试在 items.properties 块中添加 oneOf。 我真正想要的是这个:"oneOf": [{"value", "value_num"}],

感谢任何帮助。

TIA,

【问题讨论】:

    标签: json jsonschema json-schema-validator


    【解决方案1】:

    你的oneOf 应该是这样的

    "oneOf": [
      { "required": ["value"] },
      { "required": ["value_num"] }
    ]
    

    这表示必须要求“value”或“value_num”,但不能同时要求两者。

    【讨论】:

      【解决方案2】:

      几乎解决了这样的问题:

      {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "type": "object",
      "properties": {
          "observation": {
              "type": "array",
              "minItems": 1,
              "items": {
                  "type": "object",
                  "properties": {
                      "timestamp": {
                          "type": "string",
                          "format": "date-time"
                      },
                      "eventType": {
                          "type": "string"
                      },
                      "value": {
                          "type": "object"
                      },
                      "value_num": {
                          "type": "number"
                      }
      
                  },
                  "oneOf": [{"value": {
                          "type": "object"
                      },
                      "value_num": {
                          "type": "number"
                      }}],
                  "required": [
                      "timestamp",
                      "eventType"
                  ]
              }
          }
      },
      "required": [
          "observation"
      ]
      

      }

      它不会失效的是像这样的有效负载,其中 value 和 value_num 都存在,并且应该只存在 1:

      {
      "info": {
          "deviceId": "482038028341324",
          "companionId": "asdfas76df76sdf",
          "userId": "1234"
      },
      "observation": [{
              "timestamp": "2013-12-31T23:59:59-01:00",
              "eventType": "BOOT_EVENT",
              "value_num": 6,
              "value": {"boot":true}
          }
      ]
      

      }

      【讨论】:

        猜你喜欢
        • 2017-04-29
        • 2020-06-09
        • 2017-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-06
        • 1970-01-01
        • 2023-02-07
        相关资源
        最近更新 更多