JSON Schema 是不是可以使用引用外部属性的 if/then/else

Posted

技术标签:

【中文标题】JSON Schema 是不是可以使用引用外部属性的 if/then/else【英文标题】:JSON Schema Is it possible to use if/then/else which refer to outside propertyJSON Schema 是否可以使用引用外部属性的 if/then/else 【发布时间】:2019-10-12 23:23:32 【问题描述】:

我想根据其他一些属性的值有条件地添加。 只有在“isInexperienced”时才需要“companyName”和“companyAddress” 值为假。

架构


  "type": "object",
  "properties": 
    "previous_employment_section": 
      "type": "array",
      "items": 
        "type": "object",
        "properties": 
          "companyAddress": 
            "type": "string"
          ,
          "companyName": 
            "type": "string"
          
        ,
        "if": 
          "#/properties/isInexperienced": 
            "const": false
          
        ,
        "then": 
          "required": [
            "companyName",
            "companyAddress"
          ]
        
      
    ,
    "isInexperienced": 
      "type": "boolean"
    
  

数据


  "previous_employment_section": [],
  "isInexperienced": true

【问题讨论】:

【参考方案1】:

我不完全理解您原始架构的意图,但是这个怎么样?


    "$schema": "http://json-schema.org/draft-07/schema#",
    "type": "object",
    "properties": 
        "previous_employment_section": 
            "type": "array",
            "items": 
                "type": "object",
                "properties": 
                    "companyAddress": 
                        "type": "string"
                    ,
                    "companyName": 
                        "type": "string"
                    
                
            
        ,
        "isInexperienced": 
            "type": "boolean"
        
    ,
    "if": 
        "properties": 
            "isInexperienced": 
                "const": false
            
        
    ,
    "then": 
        "properties": 
            "previous_employment_section": 
                "items": 
                    "required": [
                        "companyName",
                        "companyAddress"
                    ]
                ,
                "minItems": 1
            
        
    

【讨论】:

【参考方案2】:

这是不可能的。我们需要在更高层次上拥有“if”,才能嵌套“properties”。可以使用Leadpony的方法。

【讨论】:

以上是关于JSON Schema 是不是可以使用引用外部属性的 if/then/else的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JSON Schema 中使用来自外部文件的定义?

如何使用/引用在同一个 json 模式中生成的字段值

spring JavaBean引入JavaBean ( 外部引用, 内部定义, 级联属性 )

Json Schema:仅当深层嵌套对象中存在特定属性时才需要属性

Json Schema 验证:不允许在 schema 中声明的字段以外的字段 [重复]

我可以在查看器中引用外部数据库作为模型的属性吗?