失敗在一個字典來驗證IP地址,文件API.json如下:JSON模式驗證IP地址是不工作
{
"$schema": "http://json-schema.org/draft-03/schema#",
"title": "test",
"type": "object",
"properties": {
"type": {"enum": ["spice", "vnc"]},
"listen": {
"type": "string",
"oneOf": [
{"format": "ipv4"},
{"format": "ipv6"}
]
}
},
"additionalProperties": false
}
代碼如下:
from jsonschema import Draft3Validator, ValidationError, FormatChecker
import json
if __name__ == '__main__':
graphics1 = {'type': 'spice', 'listen': '0.0.0.0'}
graphics2 = {'type': 'vnc', 'listen': '0.0.0.0'}
graphics3 = {'type': 'abc', 'listen': '0.0.0.0'}
graphics4 = {'type': 'vnc', 'listen': '777.485.999'}
graphics5 = {'type': 'vnc', 'listen': 'fe00::0'}
graphics6 = {'type': 'vnc', 'listen': 'def'}
graphics7 = {'type': 'vnc', 'listen': 'fe00::0abcdefdefs'}
s = json.load(open('API.json'))
validator = Draft3Validator(s, format_checker=FormatChecker())
for x in range(1, 8):
try:
graphics = locals().get('graphics'+str(x))
validator.validate(graphics)
except ValidationError:
print('; '.join(e.message for e in validator.iter_errors(graphics)))
而版畫是這些:
'abc' is not one of [u'spice', u'vnc']
顯然, '777.485.999', '高清' 和 'FE00 :: 0abcdefdefs' 沒有IP地址,但該測試腳本不給他們警告。 我發現了一篇關於'ip-address'的文檔(http://tools.ietf.org/html/draft-zyp-json-schema-03),但不是'ipv4',但它也不起作用。
[編輯]: 我已經爲Draft3Validator添加了FormatChecker(),但它仍然不起作用。但是,當我嘗試,Draft4Validator是好的。在文檔中,我沒有發現Draft3Valdator不支持格式/ IP地址任何地方,它應該工作。
呃你爲什麼不使用一個列表,而不是這個可怕的'當地人()'黑客和不同的變量? – ThiefMaster
你正在使用哪個工具?格式的驗證是可選的,但大多數工具都允許您爲特定格式提供擴展/自定義驗證。 – cloudfeet