使用JSON模式中的Ref参考磁盘上的本地模式



我有一个JSON模式文件:

{  
   "id":"http://schema.acme.com/user",
   "$schema":"http://json-schema.org/draft-06/schema#",
   "definitions":{  
      "user":{  
         "description":"The name the user has selected",
         "type":"object",
         "required":[  
            "username",
            "premium"
         ],
         "properties":{  
            "username":{  
               "type":"string",
               "maxLength":10,
               "minLength":1
            },
            "premium":{  
               "type":"boolean"
            }
         }
      }
   }
}

我想对此对json对象进行验证。因此,我使用此架构创建了该类型的临时对象:

{  
   "id":"http://schema.acme.com/uName",
   "$schema":"http://json-schema.org/draft-06/schema#",
   "properties":{  
      "uName":{  
         "$ref":"smUserSchema.json#/definitions/user"
      }
   },
   "required":[  
      "uName"
   ]
}

我有这个JSON数据文件:

{  
   "uName":{  
      "username":"Bob",
      "premium":true
   }
}

这里的目标是不要将我的临时对象嵌入我的JSON模式中的类型。(是的,我的问题之一是我正在尝试使用JSON进行OO技术。这是事实,我只是出于重复使用和继承原因而这样做,可能会有更好的方法。)

当我去验证这个问题时,我会收到此错误:

$ ajv -s uNameSchema.json -d validUser.json 
schema uNameSchema.json is invalid
error: can't resolve reference smUserSchema.json#/definitions/user from id http://schema.acme.com/uName#

如何在另一个模式中包含在JSON模式?

另请参见:

  • JSON模式有关使用$ REF
  • 如何管理多个JSON模式文件?

您需要确保AJV意识到smUserSchema.json,它不会自动发现它。有一个命令行选项可以通过依赖的模式,但我不记得它。AJV-助手应该告诉您(我不容易可用)。

您已经将要引用的模式的$id设置为http://schema.acme.com/user

但是,您使用的是smUserSchema.json#/definitions/user的相对引用,该转介源为http://schema.acme.com/smUserSchema.json#/definitions/user

您需要更改引用架构中定义的$id或用于$ref的相对URI,以便它们匹配。

我意识到这个答案有点晚了,希望您在现在解决问题,但这可能仍然对他人有用。

相关内容

  • 没有找到相关文章

最新更新