定义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始终采用相同的格式

我这样问是因为我看到当前的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模式是必要的。但是,如果只有类型和结构信息对我很重要,我可以使用实例本身作为模式,对吗?