当前位置: 首页 > 知识库问答 >
问题:

JSON模式中的重用模式

王飞英
2023-03-14

是否可以定义一次regex并重用它?我有几个非常复杂的正则表达式,我想将它们用作模式,用于模式中各种不同对象的大量属性的值。复制粘贴这个看起来像是自找麻烦,但我似乎找不到合适的重用示例。

删去说明我想做什么的模式。

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "patterns": {
    "fqdn_or_ipaddress": "(?=^.{4,253}$)(^((?!-)[a-zA-Z0-9-]{1,63}(?<!-)\\.)+[a-zA-Z]{2,63}$)||(((?:^[0-9])(?:(?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2}))(?![0-9])$)|(^\\*$))",
  },
  "properties": {
    "server_hostname" : {
       "type":"string",
       "pattern": {"#ref", "#/patterns/address"},
    },
    "proxy_hostname" : {
       "type":"string",
       "pattern": {"#ref", "#/patterns/address"},
    }   
  }
}

在http://www.jsonschemavalidator.net/中不进行验证,因为“pattern”不是字符串。这是一个重复使用的洞吗。我看过patternProperties,但这似乎解决了完全不同的用例。

共有1个答案

牛智志
2023-03-14

您只能$ref架构。你需要做这样的事情。

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "server_hostname" : {
      "$ref": "#/definitions/fqdn_or_ipaddress",
      "description": "The server hostname"
    },
    "proxy_hostname" : {
      "allOf": [{ "$ref": "#/definitions/fqdn_or_ipaddress" }],
      "description": "The proxy hostname"
    }
  },
  "definitions": {
    "fqdn_or_ipaddress": {
      "type": "string",
      "pattern": "(?=^.{4,253}$)(^((?!-)[a-zA-Z0-9-]{1,63}(?<!-)\\.)+[a-zA-Z]{2,63}$)||(((?:^[0-9])(?:(?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2}))(?![0-9])$)|(^\\*$))"
    }
  }
}

编辑

我添加了两个如何从$ref扩展的示例。在第一个中,您只需添加描述。它将被忽略,但不是错误。由于description只是一个元数据关键字,这应该不成问题。

 类似资料:
  • 什么类型的价值适合于此?值应该只是布尔值(根据主模式),或者可以是布尔值或字符串(在正确的地方引用基资源)。我使用的JSON验证器不允许值为布尔值以外的任何值,我在JSON规范中搜索了很多,但没有关于它的信息。

  • 我试图使用另一个JSON模式来验证JSON模式。 要验证的JSON模式示例:https://jsonschema.net/home 验证上述模式的验证模式参考:https://github.com/ajv-validator/ajv/blob/master/lib/refs/json-schema-draft-07.json 从上面的中,如果我删除,我的JSON将变得无效。 我有什么方法可以定义根

  • 问题内容: 尝试编写使用RegEx验证项目值的JSON模式。 有一个名为 progBinaryName 的项目,该项目的值应预适应此RegEx字符串。 找不到任何实际解释JSON模式中RegEx用法的教程或示例。 任何帮助/信息将不胜感激! 感谢:D JSON架构 错误: 警告!更好地检查您的JSON。 实例不是必需的类型-http://json-schema.org/draft-03/hyper

  • 尝试编写一个JSON模式,该模式使用RegEx来验证项的值。 找不到任何实际解释在JSON模式中使用RegEx的教程或示例。 任何帮助/信息将非常感谢! 谢谢,D 模式是有效的JSON,但不是有效的模式。 验证结果:失败

  • 我对文档模式的定义如下:

  • 我会用Python编写 方法解析顺序决定了应该首先检查哪个父类的方法/属性,所以我可以判断Pet.age是NewPet.age还是OldPet.age。 那幺如果我让Pet同时从NewPet和OldPet继承,其中name属性在两个模式中都定义了,每个模式中都有不同的值,会怎么样?宠物名是什么? 老宠物会优先吗?新宠物?是否未定义/无效?它是应用程序定义的吗? 我在《大摇大摆的编辑》中试过这个。显