使用JSON模式进行JSON验证
#javascript #发展 #json #web

JSON代表 JavaScript对象符号,是一种轻巧的数据互换格式。它提供了人类和机器可读取的基于文本的格式,使其成为数据互换开发人员的普遍选择。但是,由于JSON文档的灵活性,很容易误解JSON文档,这可能会导致应用程序失败。 JSON模式有助于我们避免此类系统故障。

JSON模式简介

JSON Schema是一种声明性语言,允许用户注释和验证JSON文档。 JSON模式有三个主要目标:

  • 验证:根据给定标准验证JSON文档的结构和数据类型。此标准使用JSON Schema规范中的关键字主张。
  • 文档:用作应用程序中使用的JSON文档的文档。
  • 超链接:通过创建超链接将JSON数据的一部分连接到JSON数据。

在本文中,我们将主要专注于使用JSON Schema实施JSON数据验证。

为什么JSON模式

以下JSON对象是从 Google距离矩阵API
输出

{
   "destination_addresses": [
    "Philadelphia, PA, USA"
   ],
   "origin_addresses": [
    "New York, NY, USA"
   ],
   "rows": [{
    "elements": [{
     "distance": {
      "text": "94.6 mi",
      "value": 152193
     },
     "duration": {
      "text": "1 hour 44 mins",
      "value": 6227
     },
     "status": "OK"
   }]
  }],
  "status": "OK"
}

您可以看到,上面的JSON文档由嵌套对象和数组组成。可能会有更复杂的场景。此外,应用程序通常需要验证他们收到的JSON对象。但是,如果没有正确定义的模式,应用程序将无法验证JSON文档的内容。

查看JSON模式的以下代码示例。

{
  $schema:https://json-schema.org/draft/2020-12/schema”,
  $id:https://example.com/person.schema.json”,
  title:Person,
  description:A person,
  type:object,
  properties:{
    name:{
     description:Person name,
     type:string
    },
    age:{
     description:Person age,
     type:number,
     minimum:0,
     maximum:100
    }
  },
  required:[name,age]
}

以下是满足上述模式的简单JSON对象。

{
 "name": "John Doe",
 "age": 27 
}

JSON模式帮助应用程序以更好的方式了解其JSON对象,其属性和属性的类型。结果,应用程序可以理解和使用给定的数据而没有任何意外失败。

JSON模式入门

要了解如何定义JSON模式,让我们为以下JSON对象创建示例模式。

{
 "name": "John Doe",
 "email": "john@doe.me",
 "age": 27
}

我们使用称为 json键的五个属性启动模式定义:

  • $ schema :说明JSON文档所基于的草案。
  • $ id :定义模式的基本URI。该模式中的其他URI参考已解决。
  • title 描述:仅描述值,并且不要对要验证的数据添加任何限制。
  • type :指出模式定义的数据的种类。这也是JSON文档的第一个约束。

以下是为基于JSON的员工目录创建的JSON模式。

{
  "$schema":"https://json-schema.org/draft/2020-12/schema",
  "$id":"https://example.com/employee.schema.json",
  "title":"Employee",
  "description":"An employee in the company",
  "type":"object"
}

接下来,您需要定义对象的属性。为此,将属性验证关键字添加到架构中。例如,在以下架构定义中,我们将添加一个称为 name 的密钥以及 description type string

{
  "$schema":"https://json-schema.org/draft/2020-12/schema",
  "$id":"https://example.com/employee.schema.json",
  "title":"Employee",
  "description":"An employee in the company",
  "type":"object",
  "properties": {
    "name": {
      "description": "Name of the employee",
      "type": "string"
     }  
   }
}

此外,我们应该将员工的名称定义为必需的元素,因为没有名字的员工就不可能。我们可以使用必需验证关键字在JSON模式中定义此验证。如下代码所示,可以根据需要设置名称键,通过在必需中添加。

{
  "$schema":"https://json-schema.org/draft/2020-12/schema",
  "$id":"https://example.com/employee.schema.json",
  "title":"Employee",
  "description":"An employee in the company",
  "type":"object",
  "properties": {
    "name": {
      "description": "Name of the employee",
      "type": "string"
     }  
   },
  "required": ["name"]
}

同样,使用JSON模式,您可以将多个属性定义为必需的属性。在以下代码示例中,我们除了名称外还标记了员工的电子邮件和年龄。

{
  "$schema":"https://json-schema.org/draft/2020-12/schema",
  "$id":"https://example.com/employee.schema.json",
  "title":"Employee",
  "description":"An employee in the company",
  "type":"object",
  "properties": {
    "name": {
      "description": "Name of the employee",
      "type": "string"
     },
    "email": {
      "description": "Email address of the employee",
      "type": "string"
     },
    "age": {
      "description": "Age of the employee",
      "type": "integer"
     }  
   },
  "required": ["name", "email", "age"]
}

JSON模式提供了定义许多其他验证的能力。例如,让我们考虑最大年龄在最大值时所需的最低年龄,而最大年龄为60。在这里,您可以使用最小>最小>和最大>最大 关键字来执行年龄价值在18至60之间。

请参阅以下代码示例。

{
  "$schema":"https://json-schema.org/draft/2020-12/schema",
  "$id":"https://example.com/employee.schema.json",
  "title":"Employee",
  "description":"An employee in the company",
  "type":"object",
  "properties": {
    "name": {
      "description": "Name of the employee",
      "type": "string"
     },
    "email": {
      "description": "Email address of the employee",
      "type": "string"
     },
    "age": {
      "description": "Age of the employee",
      "type": "integer",
      "minimum": 18,
      "maximum": 60
     }  
   },
  "required": ["name", "email", "age"]
}

JSON文档并不总是包含平坦的结构。它还可以包含数组或嵌套数据结构。例如,让我们使用一个联系电话密钥更新员工对象,其中员工可以具有多个联系电话和一个可以由嵌套值组成的地址密钥(邮政编码,街道,城市)。

{
 "name": "John Doe",
 "email": "john@doe.me",
 "age": 27,
 "contactNo": ["+1234567890", "+0987654321"],
 "address": {
    "postalCode": 1111,
    "street": "This street",
    "city": "This city"
  }
}

此外,JSON模式允许开发人员添加各种验证,例如限制元素的数据类型,数组中的最小元素数量,数组中是否可以包含唯一项目等等,依此类推。在我们的示例中,假设 contactno 键应该至少具有一个值,并且数组中不能有任何重复值。您可以使用 minitems uniquerItems JSON模式提供的关键字来添加这些验证。

{
  "$schema":"https://json-schema.org/draft/2020-12/schema",
  "$id":"https://example.com/employee.schema.json",
  "title":"Employee",
  "description":"An employee in the company",
  "type":"object",
  "properties": {
    "name": {
      "description": "Name of the employee",
      "type": "string"
     },
    "email": {
      "description": "Email address of the employee",
      "type": "string"
     },
    "age": {
      "description": "Age of the employee",
      "type": "integer",
      "minimum": 18,
      "maximum": 60
     },
    "contactNo": {
      "description": "Contact numbers of the employee",
      "type": "array",
      "items": {
        "type": "string"
      },
      "minItems": 1,
      "uniqueItems": true
     }
   },
  "required": ["name", "email", "age"]
}

我们可以使用上述概念在JSON模式中定义嵌套对象。由于 type 嵌套结构的验证的值是对象,您可以使用属性关键字来指定嵌套对象的结构如下。

{
  "$schema":"https://json-schema.org/draft/2020-12/schema",
  "$id":"https://example.com/employee.schema.json",
  "title":"Employee",
  "description":"An employee in the company",
  "type":"object",
  "properties": {
    "name": {
      "description": "Name of the employee",
      "type": "string"
     },
    "email": {
      "description": "Email address of the employee",
      "type": "string"
     },
    "age": {
      "description": "Age of the employee",
      "type": "integer",
      "minimum": 18,
      "maximum": 60
     },
    "contactNo": {
      "description": "Contact numbers of the employee",
      "type": "array",
      "items": {
        "type": "string"
      },
      "minItems": 1,
      "uniqueItems": true
     },
    "address": {
     "description": "Address of the employee",
     "type": "object",
     "properties": {
       "postalCode": {
        "type": "number"
       },
       "street": {
         "type": "string"
       },
       "city": {
         "type": "string"
       }
     },
     "required": ["postalCode", "street", "city"]
    }
  },
  "required": ["name", "email", "age", "address"]
}

在上面的代码中,必需的范围验证仅适用于地址键,但不超出此内容。因此,要在嵌套结构中添加必需验证,我们必须在嵌套结构中添加。

JSON模式的优势

  • 正确定义的JSON模式使JSON文档适合人类和计算机。
  • 它为JSON文档提供文档。
  • 它提供了一种简单的方法来验证应用程序中的JSON对象,通过保持一致性来跨编程语言互操作。
  • 预先编写的库可用于几乎所有流行的编程语言,以在您的应用程序中实现JSON模式。您可以找到有关您首选语言here的库的更多详细信息。

结论

在本文中,我讨论了JSON模式以及如何使用它们执行JSON验证。 JSON模式可帮助您自信地使用JSON数据格式,使您可以验证JSON结构并确保其满足API要求。

希望您发现这篇文章有帮助。谢谢您阅读!

SyncFusion的Essential JS 2是您唯一需要构建应用程序的套件。它包含一个包装中的80多种高性能,轻巧,模块化和响应性UI组件。下载free trial今天评估控件。

如果您有任何疑问或评论,可以通过我们的support forumssupport portalfeedback portal与我们联系。我们总是很乐意为您提供帮助!

相关博客