Golang中的多个模式JSON验证

时间:2018-02-07 16:16:08

标签: json go jsonschema

我需要针对JSON中的架构验证多个Golang文件。

我已经能够使用gojsonschema来实现它,这实际上是一个直接的库。

但是,我现在面临的问题是,我已经获得了与其他模式有依赖关系的模式,并且找不到加载我需要的所有模式的方法。因此,我的验证总是失败。

这是我的主要架构:

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "$ref": "#/definitions/List",
    "definitions": {
        "List": {
            "type": "array",
            "items": {
                "$ref": "#/definitions/Item"
            }
        },
        "Item": {
            "description": "An item ....",
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "property01": {
                    "description": "The property01 code.",
                    "$ref": "./CommonTypes.json#/definitions/Type01Definition"
                }
            },
            "required": [
                "property01"
            ]
        }
    }
}

而且,我有另一个常见的类型:

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "definitions": {
        "Type01Definition": {
            "description": "The definition for the type 01",
            "type": "string",
            "pattern": "^[A-Z0-9]{3}$"
        }
    }
}

有没有办法使用该库加载多个模式?或者是否有其他Golang库可以实现这一目标?

1 个答案:

答案 0 :(得分:3)

使用$ref引用文件的方法是使用URL方案指定文件的绝对路径。如果您将$ref更改为"$ref" : "file:///home/user/directory/CommonTypes.json#/definitions/Type01Definition,则您的示例将按预期工作。

如果您需要更多灵活性,可以尝试gojsonschema NewReferenceLoaderFilesystem或切换到其他Golanghttps://github.com/santhosh-tekuri/jsonschema。该库允许您添加自定义资源,以便您可以一次加载多个模式。