我不愿意放弃的主要原因之一"放开" 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。
答案 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。