定义JSON的结构是否需要JSON模式?
我这样问是因为我看到当前的JSON模式草案()建议以以下方式使用JSON模式: 对于JSON:定义JSON的结构是否需要JSON模式?,json,schema,jsonschema,Json,Schema,Jsonschema,我这样问是因为我看到当前的JSON模式草案()建议以以下方式使用JSON模式: 对于JSON: { "a":"abc" "b": 123 } 草案中提出的模式如下 { "type":"object" "properties":{ "a": {"type":"string"} "b": {"type":"integer"} } } 我这里的问题是JSON本身没有定义它的结构吗?是否需要单独的模式 草案提出的模式验证了具有上述结构的JSON,并且这些JSON始终采用相同的格式
{
"a":"abc"
"b": 123
}
草案中提出的模式如下
{
"type":"object"
"properties":{
"a": {"type":"string"}
"b": {"type":"integer"}
}
}
我这里的问题是JSON本身没有定义它的结构吗?是否需要单独的模式
草案提出的模式验证了具有上述结构的JSON,并且这些JSON始终采用相同的格式
{
"a":"string"
"b": 1 (or some number)
}
那么,JSON需要一个单独的模式吗。我们也可以简单地使用JSON来定义它的结构
注:我知道我们可以对JSON可以通过草案中提出的模式接受的值指定一些限制,但是从定义JSON结构的角度来看,提出的模式是必要的吗?到目前为止,从来没有必要,短期内我认为不必要 我个人喜欢JSON,因为它简单、可移植和灵活
我甚至没有看到大品牌使用这种模式,所以直到现在他们才认真对待它。JSON本身并没有定义这种结构。例如,我可以写:
{
"a": "string",
"b": "another string"
}
这也是有效的JSON——但它是“不同结构”的JSON,因为“b”
现在是一个字符串。但是您的API可能只接受具有特定结构的JSON,因此尽管它是有效的JSON,但它不是您需要的形状
现在,您是否需要JSON模式来定义JSON数据的结构?不,你可以说:
该值必须是对象。它必须具有两个属性:
-必须是字符串“a”
-必须是整数“b”
编辑:正如注释中指出的,您可以从一些示例数据中获取类型信息,并将其用作其他数据的模型。在本例中,您基本上使用示例数据作为超级基本模式 对于非常简单的约束(基本类型),这是有效的。但是,您如何说
“b”
必须是整数而不是浮点?你怎么说“b”
必须大于0?你怎么说“a”
不能是空字符串(“
)
确实有从示例数据生成基本JSON模式的工具,然而,所产生的模式通常需要一点调整来实际描述格式(例如MI/MAX、所需/可选属性等)。
您会考虑一个主要品牌吗?pHow关于(尽管他们使用v3)?他们还使用JSON模式来处理Chrome中的一些内部内容。在这种情况下,是时候展望模式了,谈谈API它是一个很好的实践,定义了您的实体。@CloudFoots您可以给我一些您知道的使用JSON模式的系统,以便我可以看到它们提供了什么。提前谢谢!但看看JSON,数量的类型是可以推断的。因此,我可以说JSON实例本身包含类型和结构的信息。类型可以通过以下方式推断:1。如果该值周围有引号,则它是一个字符串(“abc”)2。如果该值为真/假(不带引号),则为布尔值3。如果为null(不带引号),则表示null 4。如果它是一个数字/十进制(不带引号),那么它就是一个数字类型啊,对吗?那么你说的是检查示例数据,而不是模式?很公平-尽管如何区分整数/浮点,或指定字符串的最小长度等?答案中添加了一节。是的,我同意如果需要指定额外的限制,如字符串长度或它应该匹配的正则表达式等,JSON模式是必要的。但是,如果只有类型和结构信息对我很重要,我可以使用实例本身作为模式,对吗?