Json Schema 2020-12 版本的“prefixItems”仅验证数组的第一个元素

问题描述 投票:0回答:1

我正在使用以下 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>
java json spring-boot jsonschema json-schema-validator
1个回答
0
投票

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
        }
    ]
}
© www.soinside.com 2019 - 2024. All rights reserved.