【问题标题】:How to declare schema for at least one property is not null using JSON Schema?如何使用 JSON Schema 声明至少一个属性的模式不为空?
【发布时间】:2023-03-20 00:58:01
【问题描述】:
const personData= {
  name: null,
  email: 'test@gmail.com'
}

const schema = {
  instance: personData,
  schema: {
    type: "object",
    anyOf: [
      { required: ["name", "email"] }
    ]
  }
}

我想要一个模式来验证对象和来自对象的任何键值(名称或电子邮件),其中一个必须不为空。

【问题讨论】:

    标签: javascript node.js json jsonschema


    【解决方案1】:

    您似乎对“未定义”和“空值”感到困惑,它们截然不同。 (我现在根据您对我的回答的评论编辑了您的问题。)

    required 关键字确保在适用对象中“定义”了一个键。该值无关紧要,可能是null

    如果你想定义一个属性的类型,你必须使用type关键字。

    anyOf 必须是一组模式,其中至少一个必须为真。

    您在anyOf 中定义了一个子模式,因此,它必须作为一个整体为真,这使得required 数组中的两项都是必需的。

    您想在 anyOf 下定义多个架构,其中每个架构定义一个属性必须是特定类型(null 是一种类型)。

    
    {
      "type": "object",
      "required": ["name", "email"],
      "anyOf": [
        {
          "properties": {
            "name": {
              "type": "string"
            }
          }
        }, {
          "properties": {
            "email": {
              "type": "string"
            }
          }
        }
      ]
    }
    

    【讨论】:

    • 不,你没明白,好吧,我会有这两个属性,但是如果这两个属性都有空值呢?我想要的架构将确保这两个属性中的至少一个具有值 line { name : 'test' , email : null }
    • 我会编辑我的答案,但基本上你必须定义它们的类型。
    • 请注意,“已定义”与“空”不同,您要求的是“已定义”。 Undefined 与 null 显式不同。
    • 请仔细阅读问题,您的回答对我很有帮助
    • 我已更新我的问题以反映您的实际问题。我还根据您的 cmets 编辑了您的问题。
    猜你喜欢
    • 2015-11-04
    • 2021-02-18
    • 2018-08-04
    • 2015-10-28
    • 2021-02-23
    • 1970-01-01
    • 1970-01-01
    • 2017-10-11
    • 2016-08-20
    相关资源
    最近更新 更多