如何使用特定于应用程序的架构验证JSON文档

时间:2014-07-28 17:41:52

标签: xml json validation schema

我不愿意放弃的主要原因之一"放开" XML是我喜欢 XSD / Schemas的事实。我喜欢指定XML文件中允许的元素类型,它们需要具有哪些属性,哪些属性是可选的,属性的默认值,合法的子元素等等。

我的理解(我可能是错的)是JSON根本就没有这个概念。所以,让我们说我希望我的新RESTful Web服务接受这样的数据:

"sandwich": {
    "type": "PB and J",
    "bread": "Marble Rye",
    "sliced": "DIAGONAL"
}

从验证的角度来看,如果我可以指定一个" Schema"那将是很好的。对于这个JSON,有人无法发送给我:

"car": {
    "make": "VW",
    "model": "Jetta",
    "color": "Silver"
}

这会失败"验证,因为他们给我发了一辆"汽车"而不是"三明治"。对JSON文档可能包含的所有值,属性和嵌套对象的验证进行细粒度控制也是精彩;就像我使用XSD一样。

所以我问:JSON有这样的东西吗?如果没有,为什么?!?!如果是,什么?

如果我能找到一个可行的基于JSON的架构验证机制,我很乐意将XML转换为JSON。

2 个答案:

答案 0 :(得分:0)

在进行了一些挖掘之后,看起来在根据自定义模式验证JSON方面没有任何内容。这就是为什么大多数组织都支持XML而不是JSON,以及为什么JSON被大多数人视为“玩具语言”。普遍的共识似乎是,对于企业开发,XML是唯一可行的选择。

答案 1 :(得分:0)

我不确定它是否在您最初提出时,但现在有一种方法可以为json指定架构。 json-schema.org列出了规范,一些示例以及指向许多实现的链接。

我整理了一个与您的数据匹配的可能模式:

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "title": "Sandwich Specification",
    "type": "object",
    "properties": {
        "sandwich": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string"
                },
                "bread": {
                    "type": "string"
                },
                "sliced": {
                    "enum": ["STRAIGHT", "DIAGONAL"]
                }
            },
            "required": ["type", "bread", "sliced"]
        }
    },
    "required": ["sandwich"]
}

但请注意,您的示例需要被一对{}括号括起来才能成为有效的json。