首页 > 解决方案 > 对必需但未知的键名进行 JSON 模式验证

问题描述

我想验证此响应的架构:

{
    "738": [
        {
            "appId": 413126,
            "appName": "xyz1",
            "releaseId": 7113,
            "releaseHash": "abcde",
            "major": 2,
            "minor": 12,
            "patch": 0,
            "latest": false,
            "tracks": []
        },
        {
            "appId": 412806,
            "appName": "xyz2",
            "releaseId": 8838,
            "releaseHash": "fghijk",
            "major": 1,
            "minor": 0,
            "patch": 23,
            "latest": false,
            "tracks": []
        }
    ]
}

问题是密钥(在本例中为“738”)是动态的(事先不知道名称)并且是必需的。我知道 patternProperties,但我无法让它工作。我正在尝试使用以下验证模式:

{
        "$schema": "http://json-schema.org/draft-07/schema",
        "$id": "http://example.com/example.json",
        "type": "object",
        "required": true,
        "patternProperties": {
            "^.*$": {
                "$id": "#",
                "type": "array",
                "items": {
                    "$id": "#/items",
                    "type": "object",
                    "required": [
                        "appId",
                        "appName",
                        "releaseId",
                        "releaseHash",
                        "major",
                        "minor",
                        "patch",
                        "latest",
                        "tracks"
                    ],
                    "properties": {
                        "appId": {
                            "$id": "#/items/properties/appId",
                            "type": "number"
                        },
                        "appName": {
                            "$id": "#/items/properties/appName",
                            "type": "string"
                        },
                        "releaseId": {
                            "$id": "#/items/properties/releaseId",
                            "type": "number"
                        },
                        "releaseHash": {
                            "$id": "#/items/properties/releaseHash",
                            "type": "string"
                        },
                        "major": {
                            "$id": "#/items/properties/major",
                            "type": "number"
                        },
                        "minor": {
                            "$id": "#/items/properties/minor",
                            "type": "number"
                        },
                        "patch": {
                            "$id": "#/items/properties/patch",
                            "type": "number"
                        },
                        "latest": {
                            "$id": "#/items/properties/latest",
                            "type": "boolean"
                        },
                        "tracks": {
                            "$id": "#/items/properties/tracks",
                            "type": "array"
                        }
                    }
                }
            }
        }
    }

我得到的错误是:“错误:架构无效:data.required 应该是数组”。我不明白。如果我在开始时删除“”required“:true”,它会顺利进行,但我需要第一个动态键。有什么建议么?

标签: jsonvalidationdynamickeyschema

解决方案


推荐阅读