什么是Schema

如果你用过XML SchemaRelaxNG或者ASN.1,你可能也已经知道了什么是Schema,那么你可以跳过该章节。 在开始学习JSON Schema之前,你需要先学习JSON

JSONJavaScript对象标记),是一种轻量级的数据交换格式。它最开始应用于万维网。 现在由于JavaScript存在于大多数web浏览器中,并且JSON基于JavaScript,所以使用它变得非常容易。 然而,它足够简单并且可以应用到任何地方,而不仅仅是用web页面中。

JSON可以用来构建以下数据结构:

  • 对象

      { "key1": "value1", "key2": "value2" }
    
  • 数组

      [ "first", "second", "third" ]
    
  • 数字

      42
      3.141592653589793
    
  • 字符串

      "This is a string"
    
  • 布尔值

      true
      false
    
  • null

      null
    

这些类型在其他语言中也存在,以下是与其他语言的对比:

JavaScript Python Java Ruby
string string String String
number int/float int/float/double Integer/Float
object dict Map Hash
array list/tuple Array Array
boolean bool boolean TrueClass/FalseClass
null None null NilClass

使用这些简单的数据类型,可以表示各种结构化数据。 然而,这种巨大的灵活性带来了巨大的责任,因为同样的概念可以用无数的方式来表示。 例如,您可以使用不同的方式来表示一个人的信息:

{
    "name": "George Washington",
    "birthday": "February 22, 1992",
    "address": "Mount Vernon, Virginia, United States"
}

{
    "first_name": "George",
    "last_name": "Washington",
    "birthday": "1992-02-22",
    "address": {
        "street_address": "3200 Mount Vernon Memorial Highway",
        "city": "Mount Vernon",
        "state": "Virginia",
        "country": "United States"
    }
}

这两种描述都是有效的,但明显能看出其中一种比另外一种更为正式。 数据格式的设计很大程度上取决于在应用程序中的用途,在这里没有正确或错误的答案。 但是,当需要交互时,知道数据是怎么组织的是很重要的一件事。这时候我们需要JSON Schema

{
    "type": "object",
    "properties": {
        "first_name": { "type": "string" },
        "last_name": { "type": "string" },
        "birthday": { "type": "string", "format": "date-time" },
        "address": {
            "type": "object",
            "properties": {
                "street_address": { "type": "string" },
                "city": { "type": "string" },
                "state": { "type": "string" },
                "country": { "type" : "string" }
            }
        }
    }
}

然后你会发现第一个数据校验失败,而第二个数据校验成功。

results matching ""

    No results matching ""