如何使用 #ref 将 Json 架构调用到另一个架构

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

我想在另一个模式(car.json)中使用通用 Json 模式(genericPattern.json

car.json

{"$schema": "https://json-schema.org/draft/2020-12/schema#",
    "$id": "https://test.com/car.schema.json",
    "title": "car",
    "description": "A car",
    "type": "object",
    "properties": {
        "date": {
             "$ref": "./genericPattern.json#/patterns/DatePattern"
        }
   }
}

genericPattern.json

"$schema": "https://json-schema.org/draft/2020-12/schema#",
    "title": "GenericPatterns",
    "description": "Generic Patterns",
    "patterns": {
        "DatePattern": {
            "type": "string",
            "pattern": "mypattern",
            "message": {
                "pattern": "Correct pattern is mypattern "
            }
        }
}```

I have both schema in the .war file, same directory, but I got allways this error:

错误 500:com.networknt.schema.JsonSchemaException:#/properties/date/$ref:参考 ./genericPattern.json#/patterns/DatePattern 无法解析 ``

如果我使用:“$id”:“https://test.com/car.schema.json”,我得到:

Error 500: com.networknt.schema.JsonSchemaException: java.net.UnknownHostException: test.com

谢谢!

json-schema-validator
1个回答
0
投票

如果您希望使用通用组件文件来维护多种类型,您可以使用

$defs
集合来定义它。

您使用的

message
会被 JSON 模式验证器忽略,这不是一个可识别的关键字。

$id
的使用还取决于您使用的验证器以及如何加载模式进行验证,无论是从文件系统、通过http还是模式注册表。这个答案考虑了
$id
属性。 https://stackoverflow.com/a/76419307/8564731

以下组合模式基于

pattern: mypattern
约束成功验证。根据您的要求调整图案。

{
    "$id": "https://test.com/genericPatterns",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "title": "GenericPatterns",
    "description": "Generic Patterns",
    "$defs": {
        "DatePattern": {
            "type": "string",
            "pattern": "mypattern",
            "message": {
                "pattern": "Correct pattern is mypattern "
            }
        }
    }
}

那么你可以参考一下

{
    "$id": "https://test.com/car.schema.json",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "title": "car",
    "description": "A car",
    "type": "object",
    "properties": {
        "date": {
            "$ref": "genericPatterns#/$defs/DatePattern"
        }
    }
}
#false
{
    date: "2020-12-12",
}

#true
{
    date: "mypattern"
}
© www.soinside.com 2019 - 2024. All rights reserved.