【问题标题】:correct way to define json schema定义 json 模式的正确方法
【发布时间】:2022-11-11 07:32:38
【问题描述】:

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

{
    "$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"]
      }
}

I want to validate below set of values:

value: "[{"p1":"pqr", "p2": "{{1}}_{{2}}_{{3}"}]

Please let me know correct way for json schema for above value. So as to use enum along with pattern to validated the values

我尝试使用其中包含 _ 但未正确验证的模式

【问题讨论】:

  • enum 关键字允许定义一组可能的(有效)值。您的 p2 属性的示例数据有一个带有一些下划线的组合字符串。它应该如何工作?
  • 好的我明白了。您想将模式关键字与枚举中的值组合为正则表达式吗?这不受支持,验证器不会为您执行此操作。
  • 通过模式验证它的任何其他方式?

标签: json jsonschema json-schema-validator


【解决方案1】:

如 cmets 中所述,无法组合来自 enum 的值。相反,您可以尝试将pattern 与正则表达式一起使用。

我不确定你的组合约束,但如果你想支持{{1}}{{2}}{{3}} 的任意组合,正则表达式可能看起来像^{{[123]}}(_{{[123]}})*$。如果您有最大重复次数、想要执行订单等,您可以修改正则表达式以满足您的需求。

在一个模式中,它看起来像这样(只有p2 的最小示例):

(注意花括号的丑陋转义)

{
    "$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}}"}]

【讨论】:

    猜你喜欢
    • 2015-09-04
    • 2015-01-06
    • 2016-04-07
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    • 2016-02-09
    相关资源
    最近更新 更多