小编Max*_*xEd的帖子

如何基于字段描述的对象类型针对JSON模式验证JSON对象?

我有许多对象(消息)需要根据JSON模式(draft-04)进行验证.每个对象都保证有一个"类型"字段,它描述了它的类型,但每个类型都有一组完全不同的其他字段,因此每种类型的对象都需要一个唯一的模式.

我看到了几种可能性,其中没有一种特别吸引人,但我希望我错过了一些东西.

可能性1:对每种消息类型使用oneOf.我想这会起作用,但问题是很长的验证错误以防出现问题:验证器倾向于报告每个失败的模式,其中包括"oneOf"数组中的所有元素.

{
  "oneOf":
  [
    {
      "type": "object",
      "properties":
      {
        "t":
        {
          "type": "string",
          "enum":
          [
            "message_type_1"
          ]
        }
      }
    },
    {
      "type": "object",
      "properties":
      {
        "t":
        {
          "type": "string",
          "enum":
          [
            "message_type_2"
          ]
        },
        "some_other_property":
        {
          "type": "integer"
        }
      },
      "required":
      [
        "some_other_property"
      ]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

可能性2:嵌套"如果","然后","其他"三合会.我没有尝试过,但我想在这种情况下错误可能会更好.然而,写起来非常麻烦,因为嵌套如果堆积如山.

可能性3:针对"t"的每个可能值的单独方案.这是最简单的解决方案,但我不喜欢它,因为它阻止我在模式中使用公共元素(通过引用).

那么,这些是我唯一的选择,还是我能做得更好?

jsonschema

6
推荐指数
1
解决办法
778
查看次数

标签 统计

jsonschema ×1