Skip to main content
 首页 » 编程设计

regex之在 JSON Schema 中使用 RegEx

2024年11月01日14jyk

尝试编写一个使用 RegEx 来验证项目值的 JSON 模式。

有一个名为 的项目progBinaryName 其值应遵循此 RegEx 字符串 "^[A-Za-z0-9 -_]+_Prog\\.(exe|EXE)$" .

找不到任何实际解释在 JSON 模式中使用 RegEx 的教程或示例。

任何帮助/信息将不胜感激!

谢谢,
D

JSON 架构

{ 
    "name": "string", 
    "properties": { 
        "progName": { 
            "type": "string", 
            "description": "Program Name", 
            "required": true 
        }, 
        "ID": { 
            "type": "string", 
            "description": "Identifier", 
            "required": true 
        }, 
        "progVer": { 
            "type": "string", 
            "description": "Version number", 
            "required": true 
        }, 
        "progBinaryName": { 
            "type": "string", 
            "description": "Actual name of binary", 
            "patternProperties": { 
                "progBinaryName": "^[A-Za-z0-9 -_]+_Prog\\.(exe|EXE)$" 
            }, 
            "required": true 
        } 
    } 
} 

错误:

警告!最好检查一下你的 JSON。

实例不是必需的类型 - http://json-schema.org/draft-03/hyper-schema#

架构是有效的 JSON,但不是有效的架构。

验证结果:失败
[ { 
    "level" : "warning", 
    "schema" : { 
        "loadingURI" : "#", 
        "pointer" : "" 
    }, 
    "domain" : "syntax", 
    "message" : "unknown keyword(s) found; ignored", 
    "ignored" : [ "name" ] 
}, { 
    "level" : "error", 
    "domain" : "syntax", 
    "schema" : { 
        "loadingURI" : "#", 
        "pointer" : "/properties/ID" 
    }, 
    "keyword" : "required", 
    "message" : "value has incorrect type", 
    "expected" : [ "array" ], 
    "found" : "boolean" 
}, { 
    "level" : "error", 
    "domain" : "syntax", 
    "schema" : { 
        "loadingURI" : "#", 
        "pointer" : "/properties/progBinaryName" 
    }, 
    "keyword" : "required", 
    "message" : "value has incorrect type", 
    "expected" : [ "array" ], 
    "found" : "boolean" 
}, { 
    "level" : "error", 
    "schema" : { 
        "loadingURI" : "#", 
        "pointer" : "/properties/progBinaryName/patternProperties/progBinaryName" 
    }, 
    "domain" : "syntax", 
    "message" : "JSON value is not a JSON Schema: not an object", 
    "found" : "string" 
}, { 
    "level" : "error", 
    "domain" : "syntax", 
    "schema" : { 
        "loadingURI" : "#", 
        "pointer" : "/properties/progName" 
    }, 
    "keyword" : "required", 
    "message" : "value has incorrect type", 
    "expected" : [ "array" ], 
    "found" : "boolean" 
}, { 
    "level" : "error", 
    "domain" : "syntax", 
    "schema" : { 
        "loadingURI" : "#", 
        "pointer" : "/properties/progVer" 
    }, 
    "keyword" : "required", 
    "message" : "value has incorrect type", 
    "expected" : [ "array" ], 
    "found" : "boolean" 
} ] 
Problem with schema#/properties/progBinaryName/patternProperties/progBinaryName : Instance is not a required type 
Reported by http://json-schema.org/draft-03/hyper-schema# 
Attribute "type" (["object"]) 

请您参考如下方法:

要针对 RegEx 测试字符串值(不是属性名称),您应该使用 "pattern"关键词:

{ 
    "type": "object", 
    "properties": { 
        "progBinaryName": { 
            "type": "string", 
            "pattern": "^[A-Za-z0-9 -_]+_Prog\\.(exe|EXE)$" 
        } 
    } 
} 

附言- 如果您希望模式匹配属性的键(而不是值),那么您应该使用 "patternProperties" (就像 "properties" ,但关键是一个正则表达式)。