【问题标题】:Need a Json Schema which allows having logic conditionals on object items of an array需要一个 Json Schema,它允许对数组的对象项具有逻辑条件
【发布时间】:2016-11-03 19:44:25
【问题描述】:

我有以下类型数组的 Json 属性,其中包含对象类型的项目;它对应于一个场景,当您有一个或多个驱动程序时,存在一个且只有一个主要驱动程序和零个或任意数量的非主要驱动程序:

{
        "driver": [
          {
            "driverId": 12839,
            "isPrimary": true
          },
          {
            "driverId": 23843,
            "isPrimary": false
          }
        ],
}

"driver" 属性只有在满足以下所有要求时才有效:

  1. 每个项目的driverId 应该是唯一的。
  2. 只允许一项有"isPrimary": true
  3. 必须有一个且只有一个带有"isPrimary": true的项目; "isPrimary": false 可以有零个或任意数量的项目

现在我正在寻找实现上述要求的 Json Schema;以下是有效的"driver" 示例:

1.
    {                                                   
            "driver": [       
              {
                "driverId": 12839,
                "isPrimary": true
              }
            ]
    }
2.
    {                                                   
            "driver": [       
              {
                "driverId": 12812,
                "isPrimary": true
              },
          {
                "driverId": 38849,
                "isPrimary": false
              },
          {
                "driverId": 34323,
                "isPrimary": false
              }
            ]
    }

以下示例将无法通过验证:

  1.
        {                                                   
                "driver": [       
                  {
                    "driverId": 12839,
                    "isPrimary": false
                  }
                ]
        }
    2.
        {                                                   
                "driver": [       
                  {
                    "driverId": 12839,
                    "isPrimary": false
                  },       
                  {
                    "driverId": 34564,
                    "isPrimary": false
                  }
                ]
        }
    3.
        {                                                   
                "driver": [       

                ]
        }

【问题讨论】:

    标签: json validation jsonschema


    【解决方案1】:

    JSON 架构不支持此类要求。

    根据验证器,您可以将此要求实现为自定义关键字(例如,在 JavaScript 中使用 Ajv - 我是作者)。

    【讨论】:

    • @esp.Json 验证将成为我的中间层逻辑的一部分;有一个源系统将 json 文件发送到我的应用程序,我想要某种配置。文件驱动的规则引擎(在本例中为 Json Schema),它允许我验证这些 json 文件,如果它们有效,我将它们反序列化并将它们推送到数据库。如果不是,我将它们扔掉,我正在使用 .NET 平台和 C# 语言,我的目标是使用 Json.NET 进行验证。话虽如此,您仍然认为 Ajv 对我来说是一个合适的选择吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    相关资源
    最近更新 更多