在JSON Schema中使用ref来引用磁盘上的本地模式

时间:2017-11-22 20:48:40

标签: jsonschema ajv

我有一个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模式中用于类类型。 (是的,我的一个问题是我试图将OO技术用于JSON。这是真的,我只是为了重复使用和继承的原因,可能会一种更好的方式。)

当我去验证这个时,我收到了这个错误:

$ 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架构?

另见:

1 个答案:

答案 0 :(得分:2)

您需要确保ajv知道smUserSchema.json,它不会自动找到它。有一个命令行选项来传递依赖模式,但我无法回想起它。 ajv --help应该告诉你(我没有随时可用)。