11

我希望将 json 模式的公共部分捕获到一个文件中,然后从主模式文件中引用这个文件。所以基本上不是 1 个大的 json 模式文件,而是多个相互引用的文件。我正在使用json-schema-validator lib 进行验证。

例如:

$ ls schemas/
response_schema.json results_schema.json

$ cat schemas/response_schema.json
{
    "$schema": "http://json-schema.org/draft-04/schema",
    "type": "object",
    "required": [ "results" ],
    "properties": {
        "results": "####Reference results_schema.json file here somehow####"
    }
}   

$ cat schemas/results_schema.json
{
    "$schema": "http://json-schema.org/draft-04/schema",
    "type": "array",
    "items": {
        "type": "object",
        "required": ["type", "name"],
        "properties": {
            "name": { "type": "string" },
            "dateOfBirth": { "type": "string" }
        }
    }
}
4

2 回答 2

13

以下解决方案对我有用:

    "results": {
        "$ref": "file:src/test/resources/schemas/results.json"
    }

上述解决方案满足我的要求:

  1. 我所有的架构文件都在本地文件系统上,而不是由某个 url 托管
  2. 指定的路径相对于我运行 mvn 目标的目录。
于 2013-08-28T08:57:46.497 回答
1

这就是我的做法:

给定应用程序根目录的以下文件结构:

/schemas/
         response_schema.json
         results_schema.json

response_schema.json:

{
    "$schema": "http://json-schema.org/draft-04/schema",
    "id": "resource:/schemas/response_schema#",
    "type": "object",
    "required": [ "results" ],
    "properties": {
        "results": {
          "type": "object",
           "$ref": "results_schema.json"
     }
}  

results_schema.json:

{
    "$schema": "http://json-schema.org/draft-04/schema",
    "id": "resource:/schemas/results_schema#",
    "type": "array",
        "items": {
            "type": "object",
            "required": ["type", "name"],
        "properties": {
            "name": { "type": "string" },
            "dateOfBirth": { "type": "string" }
        }
    }
}

已通过JsonValidator.java验证

于 2016-12-20T23:13:30.353 回答