使用枚举和模式定义json模式的正确方法

y3bcpkx1  于 2022-11-19  发布在  其他
关注(0)|答案(1)|浏览(195)

我有如下json模式:请让我知道上述值的json模式的正确方法。以便使用enum沿着pattern来验证值

{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "type": "array",
    "items": 
      {
        "type": "object",
        "properties": {
          "p1": {
            "type": "string",
            "enum": ["ABC","pqr"]
          },
          "p2": {
            "type": "string",
            "enum": ["{{1}}","{{2}}","{{3}}"],
            "pattern":"*"
          },
          "p3": {
            "type": "string"
          }
        },
        "required": ["p1","p2"]
      }
}

我想验证以下一组值:
数值:[{"p1":"pqr", "p2": "{{1}}_{{2}}_{{3}"}]
请让我知道上述值的json模式的正确方法。以便使用enum沿着pattern来验证值
我尝试使用包含_的模式,但未得到正确验证

njthzxwz

njthzxwz1#

正如注解中提到的,组合enum中的值是不可能的。相反,您可以尝试使用pattern和正则表达式。
我不确定你有什么组合约束,但是如果你想支持{{1}}{{2}}{{3}}的任意组合,这个正则表达式可以看起来像^{{[123]}}(_{{[123]}})*$。如果你有最大的重复次数,想强制执行一个顺序等,你可以修改这个正则表达式来满足你的需要。
在结构描述中,它看起来会像这样(只有p2的最小范例):
(note大括号的难看转义)

{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "type": "array",
    "items": {
        "type": "object",
        "properties": {
            "p2": {
                "type": "string",
                "pattern": "^\\{\\{[123]\\}\\}(_\\{\\{[123]\\}\\})*$"
            }
        },
        "required": ["p2"]
    }
}

允许[{"p2": "{{1}}_{{2}}_{{3}}"}]但拒绝[{"p2": "{{1}}_foo_{{3}}"}]

相关问题