JSON模式模板和JSON编辑器

JSON模式模板和JSON编辑器,json,editor,jsonschema,swig-template,Json,Editor,Jsonschema,Swig Template,我已经挣扎了几天,试图使用Javascript插件。我正在使用,但我对解决我的问题的主张持开放态度 我创建了一个JSON模板,到目前为止运行良好,但这并没有完全达到我需要做的事情,我尝试理解并使用JSON编辑器github页面提供的语法,但到目前为止运气不佳 如何使模板的行为如下所示: 如果features.type的值==“Point”,则我希望features.display具有类型为“#/definitions/marker”的属性。否则(features.type==“Polygon”)

我已经挣扎了几天,试图使用Javascript插件。我正在使用,但我对解决我的问题的主张持开放态度

我创建了一个JSON模板,到目前为止运行良好,但这并没有完全达到我需要做的事情,我尝试理解并使用JSON编辑器github页面提供的语法,但到目前为止运气不佳

如何使模板的行为如下所示:

如果features.type的值==“Point”,则我希望features.display具有类型为“#/definitions/marker”的属性。否则(features.type==“Polygon”),我希望features.display具有类型为“#/definitions/area”的属性。filter.display也是如此

到目前为止,我使用了“oneOf”属性,因为它最接近我想要的,但肯定不完全如此

谢谢你的帮助

亲切的问候

以下是我迄今为止的JSON模式:

{
    "type": "array",
    "title": "Layers",
    "items": {
        "title": "Layer",
        "type": "object",
        "headerTemplate": "{{table.id.public_name}}",
        "properties": {
            "table":{"$ref": "#/definitions/table"},
            "features":{"$ref": "#/definitions/features"}
        }
    },
    "definitions": {
        "table": {
            "title": "Table Information",
            "type": "object",
            "properties": {
                "id":{"$ref": "#/definitions/id"},
                "primary_key":{"$ref": "#/definitions/primary_key"},
                "read":{"$ref": "#/definitions/read"}
            }
        },
        "features": {
            "title": "Features Settings",
            "type": "object",
            "properties": {
                "type":{"$ref": "#/definitions/type"},
                "id":{"$ref": "#/definitions/id"},
                "cols":{"$ref": "#/definitions/cols"},
                "display": {
                    "type": "object",
                    "title": "Display",
                    "format": "grid",
                    "oneOf": [
                        {"$ref": "#/definitions/marker"},
                        {"$ref": "#/definitions/area"}
                    ]
                }
            }
        },
        "cols": {
            "title": "Table Columns",
            "type": "array",
            "items": {
                "type": "object",
                "title": "Column",
                "properties": {
                    "id":{"$ref": "#/definitions/id"},
                    "read":{"$ref": "#/definitions/read"},
                    "write":{"$ref": "#/definitions/write"},
                    "filter":{"$ref": "#/definitions/filter"}
                }
            }
        },
        "id": {
            "title": "Identifier",
            "type": "object",
            "format": "grid",
            "properties": {
                "name":{"$ref": "#/definitions/name"},
                "public_name":{"$ref": "#/definitions/public_name"}
            }
        },
        "name": {
            "title": "Name",
            "type": "string"
        },
        "public_name": {
            "title": "Public Name",
            "type": "string"
        },
        "primary_key": {
            "title": "Primary key",
            "type": "string",
            "format": "grid"
        },
        "write": {
            "title": "Editing",
            "type": "object",
            "format": "grid",
            "properties": {
                "read":{"$ref": "#/definitions/read"},
                "method":{"$ref": "#/definitions/method"}
            }
        },
        "read": {
            "title": "Reading",
            "type": "array",
            "items": {
                "type": "integer",
                "title": "Access Level",
                "format": "grid",
                "properties":{"$ref": "#/definitions/access_level"}
            }
        },
        "type": {
            "title": "Type",
            "type": "string",
            "enum": [ "Point", "Polygon" ]
        },
        "access_level": {
            "title": "Access Level",
            "type": "integer",
            "format": "number"
        },
        "method": {
            "title": "Method",
            "type": "object",
            "format": "grid",
            "properties": {
                "type":{"$ref": "#/definitions/method_type"},
                "data":{"$ref": "#/definitions/data"}
            }
        },
        "data": {
            "title": "Data",
            "type": "array",
            "items": {
                "type": "string",
                "title": "Data",
                "format": "grid",
                "properties":{"$ref": "#/definitions/value"}
            }
        },
        "value": {
            "title": "Value",
            "type": "string"
        },
        "filter": {
            "title": "Filter",
            "type": "array",
            "items": {
                "type": "object",
                "title": "Filter",
                "properties": {
                    "value":{"$ref": "#/definitions/value"},
                    "display": {
                        "type": "object",
                        "oneOf": [
                            {"$ref": "#/definitions/marker"},
                            {"$ref": "#/definitions/area"}
                        ]
                    }
                }
            }
        },
        "marker": {
            "title": "Marker",
            "type": "object",
            "format": "grid",
            "properties": {
                "color":{"$ref": "#/definitions/color"},
                "icon":{"$ref": "#/definitions/icon"}
            }
        },
        "color": {
            "title": "Color",
            "type": "string",
            "enum": ["red", "darkred", "orange", "green", "darkgreen", "blue", "purple", "darkpuple", "cadetblue"]
        },
        "css_color": {
            "title": "CSS Color",
            "type": "string",
            "format": "color"
        },
        "icon": {
            "title": "Icon",
            "type": "object",
            "format": "grid",
            "properties": {
                "name":{"$ref": "#/definitions/name"},
                "color":{"$ref": "#/definitions/css_color"}
            }
        },
        "area": {
            "title": "Area",
            "type": "object",
            "properties": {
                "color":{"$ref": "#/definitions/color"},
                "border":{"$ref": "#/definitions/border"}
            }
        },
        "border": {
            "title": "Border",
            "type": "object",
            "properties": {
                "border_color":{"$ref": "#/definitions/border_color"},
                "width":{"$ref": "#/definitions/width"}
            }
        },
        "border_color": {
            "title": "Color",
            "type": "object",
            "format": "grid",
            "properties": {
                "normal":{"$ref": "#/definitions/normal"},
                "hover":{"$ref": "#/definitions/hover"}
            }
        },
        "width": {
            "title": "Width",
            "type": "string"
        },
        "normal": {
            "title": "Normal",
            "type": "string",
            "format": "color"
        },
        "hover": {
            "title": "Hover",
            "type": "string",
            "format": "color"
        },
        "method_type": {
            "title": "Type",
            "type": "string",
            "enum": [ "text", "select" ]
        }
    }
}

强制执行此操作的唯一方法(直到jsonschema草案5出现)是将枚举用作鉴别器。你可以在

中找到一个例子,谢谢你的建议!我结束了对几个文件的引用,创建了一个双分支层次结构,并在插件初始化时选择了正确的体系结构。迫不及待地等待草案5,这将使生活更加轻松!