我正在使用以下 json 架构来验证 json。当我在 json 的“appData”数组中有多个元素时,它仅验证“appData”数组中的第一个“appData”,即 json 模式仅验证 appData[0]。其余的如 appData[1]、appData[2] 未经过验证。 “prefixItems”是否仅验证数组的第一个元素?
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"appName": {
"type": "string"
},
"appData": {
"type": "array",
"prefixItems": [
{
"type": "object",
"properties": {
"appReference": {
"type": "string"
},
"tableName": {
"type": "string"
},
"beginDate": {
"type": "string",
"pattern": "^[0-9]{1,2}\\/[0-9]{1,2}\\/[0-9]{4}$",
"description": "Use regex to validate this string as a date"
},
"isTrueBeginDate": {
"type": "string"
},
"paid": {
"type": "string"
},
"amount": {
"type": "null"
}
},
"required": [
"appReference",
"tableName",
"beginDate",
"paid",
"amount"
]
}
]
}
},
"required": [
"appName",
"appData"
]
}
我正在使用以下 Maven 依赖项来验证 java 中的 json。
<dependency>
<groupId>com.networknt</groupId>
<artifactId>json-schema-validator</artifactId>
<version>1.4.0</version>
</dependency>
prefixItems
用于定义一个元组,并且仅验证 prefixItems
数组中定义的每个索引。
举这个例子
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "array",
"prefixItems": [
{
"type": "boolean"
},
{
"type": "string"
},
{
"type": "number"
}
]
}
[true, "test", 1]
[true, true, 1]
src:https://json-schema.org/understanding-json-schema/reference/array#tupleValidation
如果您想使用相同的模式验证所有数组索引,您可以使用
items
关键字来验证所有数组索引
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"appName": {
"type": "string"
},
"appData": {
"type": "array",
"items": [
{
"type": "object",
"properties": {
"appReference": {
"type": "string"
},
"tableName": {
"type": "string"
},
"beginDate": {
"type": "string",
"pattern": "^[0-9]{1,2}\\/[0-9]{1,2}\\/[0-9]{4}$",
"description": "Use regex to validate this string as a date"
},
"isTrueBeginDate": {
"type": "string"
},
"paid": {
"type": "string"
},
"amount": {
"type": "null"
}
},
"required": [
"appReference",
"tableName",
"beginDate",
"paid",
"amount"
]
}
]
}
},
"required": [
"appName",
"appData"
]
}
{
"appName": "test",
"appData": [
{
"appReference": "thing",
"tableName": "table-one",
"beginDate": "01-01-2017",
"paid": "1.50",
"amount": null
},
{
"appReference": "thing-two",
"tableName": "table-two",
"beginDate": "01-01-2017",
"paid": "1.50",
"amount": null
},
{
"appReference": "thing-three",
"tableName": "table-three",
"beginDate": "01-01-2017",
"paid": "1.50",
"amount": null
},
{
"appReference": "thing-four",
"tableName": "table-four",
"beginDate": "01-01-2017",
"paid": "1.50",
"amount": null
}
]
}