4

我需要为将包含 java Properties 对象作为其属性之一的对象创建一个 JSON 模式。嵌套的 Properties 对象将是 key=value 的简单列表。键和值都是字符串类型。我找不到任何描述如何定义包含 2 种新类型的架构的文档。

它应该是这样的:

{
"type": "object",
"name": "MyObj",
"properties": {
    "prop1": {
        "type": "string",
        "description": "prop1",
        "required": true
    },
    "props": {
        "type": "array",
        "items": {
            "type": "object"
            "properties": {
                "key": {
                    "type": "string",
                    "description": "key",
                    "required": true
                },
                "value": {
                    "type": "string",
                    "description": "the value",
                    "required": true
                }
            }
            "description": "the value",
            "required": true
        }
    }
}

}

4

2 回答 2

22

您编写的模式(假设逗号是固定的)描述了以下形式的数据:

{
    "prop1": "Some string property goes here",
    "props": [
        {"key": "foo", "value": "bar"},
        {"key": "foo2", "value": "bar2"},
        ...
    ]
}

如果这是你想要的,那么你已经完成了。

但是,我确实想知道为什么您在数组中使用键/值对,而您可以使用带有字符串键的 JSON 对象。使用additionalProperties关键字,您可以有一个架构:

{
    "type": "object",
    "name": "MyObj",
    "properties": {
        "prop1": {
            "type": "string",
            "description": "prop1"
        },
        "props": {
            "type": "object",
            "additionalProperties": {
                "type": "string",
                "description": "string values"
            }
        }
    }
}

这描述了一种数据格式,如:

{
    "prop1": "Some string property goes here",
    "props": {
        "foo": "bar",
        "foo2": "bar2"
    }
}
于 2013-10-14T18:07:14.727 回答
0

W3 学校(JSON 语法)中,您可以阅读应如何定义数组。

没有像 xsd for xml 这样的架构,但是我在 json-schema.org 上找到了一种方法。如果可以的话,我会建议你使用 JSON 的 google-GSON。您可以将键值存储为"id" : "value"并仅构建一个对象,其中包含所有需要的对:

{ "lang" : "EN" , "color" : "red" }

您发布的模型不正确,您可以在 jsonlint.com 上查看 这是一个工作版本,我不确定模型是否符合预期。

{
    "type": "object",
    "name": "MyObj",
    "properties": [
        {
            "prop1": {
                "type": "string",
                "description": "prop1",
                "required": true
            },
            "props": {
                "type": "array",
                "items": {
                    "type": "object",
                    "properties": {
                        "key": {
                            "type": "string",
                            "description": "key",
                            "required": true
                        },
                        "value": {
                            "type": "string",
                            "description": "the value",
                            "required": true
                        }
                    },
                    "description": "the value",
                    "required": true
                }
            }
        }
    ]
}
于 2013-10-14T14:26:50.703 回答