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 に答える