私はJSONを初めて使用するので、本当に単純なものを見逃しても驚かないでしょうが、スキーマで何が間違っているのか、なぜそれがいくつかのことを間違って検証するのかを見つけようとしましたが失敗しました。これは私のスキーマです:
apartment_schema = {
"type": "object",
"properties": {
"Apartments": {"type": "object"},
"properties": {"ap1": {"type": "object",
"required": ["count", "ages"],
"properties": {"count": {"type": "number"},
"ages": {"type": "array", "items": {"type": "number"}}},
"additionalProperties": False,
},
"ap2": {"type": "object",
"required": ["count", "ages"],
"properties": {"count": {"type": "number"},
"ages": {"type": "array", "items": {"type": "number"}}},
"additionalProperties": False,
},
"ap3": {"type": "object",
"required": ["count", "ages"],
"properties": {"count": {"type": "number"},
"ages": {"type": "array", "items": {"type": "number"}}},
"additionalProperties": False,
},
},
"required": ["ap1", "ap2", "ap3"],
"additionalProperties": False,
},
"additionalProperties": False,
"required": ["Apartments"]
}
json.loadsを使用して文字列を検証し、次にこのスキーマに対してvalidate関数を使用しようとしていますが、これを試みると、次のメッセージが表示されます。
jsonschema.exceptions.SchemaError: ['ap1', 'ap2', 'ap3'] is not of type 'object', 'boolean'
これが私がそれを検証しようとする方法であり、何に対してです:
def validateJson(jsonData):
try:
jsonschema.validate(instance=jsonData, schema=apartment_schema)
except jsonschema.exceptions.ValidationError:
return False
return True
print(validateJson(json.loads("{\"Apartments\": {\"ap1\": {\"count\": 1, \"ages\": [40]},\"ap3\": {\"ages\": [10,15]}}}"))
この検証は成功し、スキーマから必要な部分を1つだけ削除しても、必要なパラメーター(カウント)の1つが欠落しているため、合格すべきではありませんが、エラーメッセージは表示されません。別の文字列を入力すると、エラーが発生しなくても、他の「必須」フィールドは機能していないように見えます。私はここで間違って何をしていますか?
properties
「Apartments」プロパティ宣言のすぐ下にあるべきではない追加のキーワードがあるため、その下のすべてが間違ったレベルで解析されています。プロパティ「ap1」、「ap2」、「ap3」は、データ内で「アパート」と同じレベルにある必要があると思いますか?
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加