自分のオブジェクトの配列を宣言して定義したいと思いますが、インスタンスの検証に問題があります。
同じスキーマ内のオブジェクトへの私$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"]
}
は正しい検証エラーを与えます。
も、私の元のスキーマは私」と、そのサイトで検証nfo "をインスタンスに指定するかどうかを指定します。だから私はどれくらい厳格かはわかりません。 – Dodomac
これは有効なため検証されますが、さらにテストが必要な場合は、https://jsonschemalint.com/#/version/draft-04/markup/jsonおよびhttps:// json- schema-validator.herokuapp.com/(この最後のものではidを "#"に変更します)。どのようなバリデータを使用していますか? – Pedro
私は「http://json-schema-validator.herokuapp.com/」を使っていたことを一番上に述べました。今、私は 'id'を '#'に変更しました。これの意義は何ですか? – Dodomac