2017-08-21 12 views
0

自分のオブジェクトの配列を宣言して定義したいと思いますが、インスタンスの検証に問題があります。

同じスキーマ内のオブジェクトへの私$refポイントは(ここで指定されたスキーマにだけ指すことができます。Can JSON integer attributes be referenced?

私は指導のために、このリンクをたどってきました。 https://spacetelescope.github.io/understanding-json-schema/structuring.html

ここで検証しています。 http://json-schema-validator.herokuapp.com/

feeder_tx配列に他の種類の要素を追加しないようにしてスキーマを厳格にしたいのですが、正しい構文を取得できないようです。

{ 
    "id": "params-schema", 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "description": "my schema", 

    "definitions": { 

     "tx": { 

      "type": "object", 
      "properties": { 

       "comment": {"type": "string"}, 

       "max_channels": { 

        "type": "integer", 
        "minimum" : 0, 
        "maximum" : 10000, 
        "additionalProperties": false 
       }     
      }, 

      "additionalProperties": false, 
      "required": ["max_channels"] 
     } 
    }, 

    "type": "object", 
    "properties": { 

     "feeder_tx": { 

      "type": "array", 
      "minItems": 1, 
      "maxItems": 4, 
      "items": { 

       "type": "object", 
       "properties": { 

        "comment": {"type": "string"}, 

        "info": { 

         "$ref": "#/definitions/tx", 
         "additionalProperties": false 
        } 
       } 
      } 
     } 
    }, 

    "required": ["feeder_tx"] 
} 

これはインスタンスである:

{ 
    "feeder_tx": [ 

      {"lala": 25, "max_channels": 1499} 
    ] 
} 

私は理由lalaの追加で失敗したいと思いますが、代わりに、それが正常に検証さ

この

はスキーマです。

私はバリデータが"lala""max_channels"の両方について不平を言うitems"properties"セクションの最後に"additionalProperties": falseを追加する場合。

:このインスタンスデータ用

[ { 
    "level" : "fatal", 
    "message" : "URI \"params-schema#\" is not absolute", 
    "uri" : "params-schema#", 
    "info" : "other messages follow (if any)" 
} ] 

:私は次のようなエラーが発生したインスタンスは"info"を参照作るしようとすると、次のレベルは"info"

[ { 
    "level" : "error", 
    "schema" : { 
    "loadingURI" : "#", 
    "pointer" : "/properties/feeder_tx/items" 
    }, 
    "instance" : { 
    "pointer" : "/feeder_tx/0" 
    }, 
    "domain" : "validation", 
    "keyword" : "additionalProperties", 
    "message" : "object instance has properties which are not allowed by the schema: [\"lala\",\"max_channels\"]", 
    "unwanted" : [ "lala", "max_channels" ] 
} ] 

があるので

は、これは理にかなっています

{ 

    "feeder_tx": [ 

      {"info": { "max_channels": 1499}} 
    ] 

} 

実際、なぜ私はを持っている必要があるのか​​わかりません私は事物としてオブジェクト$ref ingはオブジェクトです。

したがって、インスタンスデータを元に戻してこのオブジェクトを削除します。次のエラーが発生します。

"type": "object", 
"properties": { 

    "feeder_tx": { 

     "type": "array", 
     "minItems": 1, 
     "maxItems": 4, 
     "items": { 

      "$ref": "#/definitions/tx" 
     } 
    } 
}, 

誰かがここで何が起こっているのかを説明し、それを行うための正しい方法くださいすることができ:スキーマとインスタンスすなわち

[ { 
    "level" : "fatal", 
    "message" : "URI \"params-schema#\" is not absolute", 
    "uri" : "params-schema#", 
    "info" : "other messages follow (if any)" 
} ] 

はこのなり?

$refを使用しないようにスキーマを再構成すると問題は解決しますが、参考文献でそれを行う方法を知りたいと思います。

[ { 
    "level" : "error", 
    "schema" : { 
    "loadingURI" : "#", 
    "pointer" : "/properties/feeder_tx/items" 
    }, 
    "instance" : { 
    "pointer" : "/feeder_tx/0" 
    }, 
    "domain" : "validation", 
    "keyword" : "additionalProperties", 
    "message" : "object instance has properties which are not allowed by the schema: [\"lala\"]", 
    "unwanted" : [ "lala" ] 
} ] 

ありがとう:

{ 
    "id": "params-schema", 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "description": "parameters schema", 


    "type": "object", 
    "properties": { 

     "feeder_tx": { 

      "type": "array", 
      "minItems": 1, 
      "maxItems": 4, 
      "items": { 

      "type": "object", 
      "properties": { 

       "comment": {"type": "string"}, 

       "max_channels": { 

        "type": "integer", 
        "minimum" : 0, 
        "maximum" : 10000, 
        "additionalProperties": false 
       }     
      }, 

      "additionalProperties": false, 
      "required": ["max_channels"] 
      } 
     } 
    }, 

    "required": ["feeder_tx"] 
} 

は正しい検証エラーを与えます。

答えて

1

これは動作します:

{ 
    "id": "#", 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "description": "parameters schema", 
    "definitions": { 
    "item": { 
     "type": "object", 
     "properties": { 
     "comment": { 
      "type": "string" 
     }, 
     "max_channels": { 
      "type": "integer", 
      "minimum": 0, 
      "maximum": 10000, 
      "additionalProperties": false 
     } 
     }, 
     "additionalProperties": false, 
     "required": [ 
     "max_channels" 
     ] 
    } 
    }, 
    "type": "object", 
    "properties": { 
    "feeder_tx": { 
     "type": "array", 
     "minItems": 1, 
     "maxItems": 4, 
     "items": { 
     "$ref": "#/definitions/item" 
     } 
    } 
    }, 
    "required": [ 
    "feeder_tx" 
    ] 
} 

使用してみました:

+0

も、私の元のスキーマは私」と、そのサイトで検証nfo "をインスタンスに指定するかどうかを指定します。だから私はどれくらい厳格かはわかりません。 – Dodomac

+0

これは有効なため検証されますが、さらにテストが必要な場合は、https://jsonschemalint.com/#/version/draft-04/markup/jsonおよびhttps:// json- schema-validator.herokuapp.com/(この最後のものではidを "#"に変更します)。どのようなバリデータを使用していますか? – Pedro

+0

私は「http://json-schema-validator.herokuapp.com/」を使っていたことを一番上に述べました。今、私は 'id'を '#'に変更しました。これの意義は何ですか? – Dodomac

関連する問題