首先,我在Web平台上也没有得到正确的错误响应(https://jsonschemalint.com)。我在python中使用jsonschema,并且具有正确的json模式和json数据有效。
我要解决的问题如下:在提供带有示例数据的JSON文件之前,我们需要通过SoapUI运行它们以测试它们是否正确,因为我们正在处理大型文件,通常我们的开发人员可能在生成它们时会出错,所以我们进行最后检查。
我想创建一个脚本来自动执行此操作,避免使用SoapUI。因此,在谷歌搜索之后,我遇到了jsonschema,并尝试使用它。我得到了所有正确的结果,等等,像往常一样删除某些元素时出现错误,但是最大的问题如下:
示例: 我的JSON模式中有一个subsubsub对象,我们称它为Test1,它包含以下内容:
**Schema**
{
"exname":"2",
"info":{},
"consumes":{},
"produces":{},
"schemes":{},
"tags":{},
"parameters":{},
"paths":{},
"definitions":{
"MainTest1":{
"description":"",
"minProperties":1,
"properties":{
"test1":{
"items":{
"$ref":"#//Test1"
},
"maxItems":10,
"minItems":1,
"type":"array"
},
"test2":{
"items":{
"$ref":"#//"
},
"maxItems":10,
"minItems":1,
"type":"array"
}
}
},
"Test1":{
"description":"test1des",
"minProperties":1,
"properties":{
"prop1":{
"description":"prop1des",
"example":"prop1exam",
"maxLength":10,
"minLength":2,
"type":"string"
},
"prop2":{
"description":"prop2des",
"example":"prop2example",
"maxLength":200,
"minLength":2,
"type":"string"
},
"prop3":{
"enum":[
"enum1",
"enum2",
"enum3"
],
"example":"enum1",
"type":"string"
}
},
"required":[
"prop3"
],
"type":"object"
}
}
}
**Proper example for Test1**
{
"Test1": [{
"prop1": "TestStr",
"prop2": "Test and Test",
"prop3": "enum1"
}]
}
**Improper example that still passes validation for Test1**
{
"test1": [{
"prop1": "TestStr123456", [wrong as it passes the max limit]
"prop2": "Test and Test",
"prop3": " enum1" [wrong as it has a whitespace char before enum1]
}]
}
我遇到的第一个问题是prop3中的枚举未正确验证。因此,当我使用“ enum1”或“ enumruwehrqweur”或“任何文字”时,测试就会通过。另外,整个我的JSON都不会检查最小-最大字符。无论我在任何字段中使用多少个字符,我都不会出错。任何人都知道如何解决此问题,还是有人找到了更好的解决方法来完成我想做的事情?预先谢谢你!
答案 0 :(得分:1)
您的架构存在一些问题。我会分别给他们讲。
在您的模式中,您具有“ Test1”。在您的JSON实例中,您具有“ test1”。案例很重要。我想这只是创建您的示例时的错误。
在架构中,您在根级别具有“ Test1”。因为这不是架构关键字,所以将其忽略,并且对验证没有影响。您需要像在其他地方一样将其嵌套在“属性”对象中。
{
"properties": {
"test1": {
您的验证仍然无法正常工作。如果要验证数组中的每个项目,则需要使用items
关键字。
{
"properties": {
"test1": {
"items": {
"description": "test1des",
最后,您需要将required
和type
关键字嵌套在items
对象中。
这是完整的架构:
{
"properties": {
"test1": {
"items": {
"description": "test1des",
"minProperties": 1,
"properties": {
"prop1": {
"description": "prop1des",
"example": "prop1exam",
"maxLength": 10,
"minLength": 2,
"type": "string"
},
"prop2": {
"description": "prop2des",
"example": "prop2example",
"maxLength": 200,
"minLength": 2,
"type": "string"
},
"prop3": {
"enum": [
"enum1",
"enum2",
"enum3"
],
"example": "enum1",
"type": "string"
}
},
"required": [
"prop3"
],
"type": "object"
}
}
}
}