如果您能为您的问题提供更多背景信息,将会对其他人有所帮助。首先,您的示例来自Understanding JSON Schema 指南的第 30 页(印刷版)。您的 JSON 是 JSON 模式(草案 #4)。
因为您在谈论模式,所以我认为您的问题是关于模型的。更清楚地说,我认为您的问题类似于多年前提出的问题:可以使用 UML 来表示 XSD 结构吗?
我确实使用 XSD 来描述 JSON 结构;我们在 XSD 和 JSON 模式之间进行了自动转换(草案 #4),因为我自己使用 XSD 作为数据建模语言。
您的特定示例没有自然的 XSD 等效项。当然,我的意思是与 XML 一样有意义,并且“通用”XML 到 JSON 的转换会产生预期的结果。
如果我们去掉简单的东西,比如一个简单的类型建模为一个列表:
<xsd:simpleType name="array">
<xsd:list itemType="xsd:float"/>
</xsd:simpleType>
基本相同(逗号分隔符除外):
{
"type": "array",
"items": {
"type": "number"
}
}
那么我的回答实际上是关于一个“配置文件”,转换工具将使用该配置文件将 XSD 中表示的模型的语义(换句话说,我们在这里不关注 XML 文档)放入同样使用 JSON 模式表示。
我们的 XSD 到 JSON 架构配置文件使用复杂类型来表示对象和数组。当应用于复杂类型的“原型”是“数组”时,以下模型与您的 JSON 模式完美匹配。
<xsd:complexType name="address">
<xsd:annotation>
<xsd:appinfo>
<xsd2json:type>array</xsd2json:type>
</xsd:appinfo>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="StreetNumber" type="xsd:float"/>
<xsd:element name="StreetName" type="xsd:string"/>
<xsd:element name="StreetType">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Street"/>
<xsd:enumeration value="Avenue"/>
<xsd:enumeration value="Boulevard"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="StreetDirection">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="NW"/>
<xsd:enumeration value="NE"/>
<xsd:enumeration value="SW"/>
<xsd:enumeration value="SE"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>