我在java代码中寻找数据数组的JSON Schema验证。
我的JSON架构是
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"acc": {
"type": "array",
"items": [
{
"type": "object",
"properties": {
"AccId": {
"type": "integer"
},
"accName": {
"type": "string"
},
"accSysName": {
"type": "string"
},
"accLName": {
"type": "string"
}
},
"required": [
"AccId",
"accName",
"accSysName",
"accLName"
]
}
]
}
},
"required": [
"acc"
]
}
而我对1条记录的JSON响应是
{
"acc": [
{
"AccId": 123,
"accName": "test",
"accSysName": "ABC",
"accLName": "test"
}
]
}
{{}}}中的代码在上述情况下工作正常,但在下面的情况下,它不会检查第二条记录,即JSON响应有多个对象时。
多条记录的JSON响应:
{
"acc": [
{
"AccId": 123,
"accName": "test",
"accSysName": "Abc",
"accLName": "test"
},
{
"pqr": 456,
"qwe": "test2",
"accSysName": "ghu",
"accLName": "test3"
}
]
}
我尝试使用additionalProperties / additionalItems:false,但它不适用于其中任何一个,我在Stack Overflow中检查了几个旧帖子,但没有得到所需的结果。
还有其他方法可以使用吗?
答案 0 :(得分:0)
验证您的json响应。将json响应复制并粘贴到下面的链接中 https://jsonformatter.curiousconcept.com/
它会告诉你你的json是否有效
答案 1 :(得分:0)
您使用的是错误的items
形式。你想要的表格应该是这样的。
{
"type": "array",
"items": { "type": "string" }
}
这将验证所有项目都是字符串
["foo", "bar"]
另一种形式的items
描述了类似元组的东西。
{
"type": "array",
"items": [
{ "type": "string" }
{ "type": "integer" }
]
}
这验证数组的第一项是字符串,第二项是整数。通过第二项的任何内容都将被忽略(除非您使用additionalItems
)
["foo", 1]
因此,在您的架构中,您已经定义了一个元素的元组,其余元素被忽略。切换到第一个表单,它将按预期工作。
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"acc": {
"type": "array",
"items": {
"type": "object",
"properties": {
"AccId": {
"type": "integer"
},
"accName": {
"type": "string"
},
"accSysName": {
"type": "string"
},
"accLName": {
"type": "string"
}
},
"required": [
"AccId",
"accName",
"accSysName",
"accLName"
]
}
}
},
"required": [
"acc"
]
}